emluy 개발 일기

C++ - (백준) 삼성기출 20056번 마법사 상어와 파이어볼 본문

알고리즘/c, c++

C++ - (백준) 삼성기출 20056번 마법사 상어와 파이어볼

yulme 2021. 1. 3. 00:09
SMALL

0. 문제

www.acmicpc.net/problem/20056

 

20056번: 마법사 상어와 파이어볼

첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치

www.acmicpc.net

1. 문제 해석

1-1. 1번 행은 N번 행과 연결되어 있고, 1번 열은 N번열과 연결되어 있다

ex) 3X3 map 일 때

1 2 3
4 5 6
7 8 9

: 6번 자리에 파이어볼이 있고 방향은 2일때 map 바깥으로 나가는 것이 아니라 1번 열과 3번 열이 연결되어 있으므로 4번에 위치하게 된다. rotation

 

1-2. 모두 홀수이거나 모두 짝수이면 ~하고 아니면 ~해라.

: 홀수, 짝수 변수를 bool 타입으로 선언 후 true 로 초기화함(최종으로 나올 경우의 수를 살피고 의미를 먼저생각후 초기화를 true로 할지 false로 할지 정해야함).

파이어볼들의 방향을 하나씩 살펴볼때 짝수이면 홀수변수를 false로, 홀수이면 짝수변수를 true로 변경해줌.

-> 최종 나올 수 있는 경우의 수는 3가지

짝수 홀수 의미
true false 방향이 모두 짝수
false true 방향이 모두 홀수
false false 방향이 짝수 홀수 섞임

-> true true는 나오면 안된다~! 그러니까 처음에 true true로 초기화해주고 모두 짝수면 홀수 변수의 값을 바꿔주고 모두 홀수면 짝수 변수를 바꿔준다! (짝수면 짝수변수 값을, 홀수면 홀수 변수 값을 변환해주는게 아님~!)

 

2. 풀이 순서

- NXN map에서 각 자리에 여러개의 파이어볼이 위치할 수 있다. 각 파이어볼은 속성 여러개(좌표,질량,속도)를 갖는다.

    -> 파이어볼은 struct 타입, map은 파이어볼 struct 타입의 2차원 배열

 

3. 알아야하는 것

3-1. struct 타입의 vector

-구조체 원소들을 중괄호 이용해서 push_back( )

 

3-2. struct vector로 이루어진 배열

- 칸마다 vector 한번에 삭제

- 칸에 vector 넣기

 

4. 중요한 것

4-1. 배열의 가장 왼쪽 위 좌표는 (0,0)이 아닌 (1,1)이다!! -> 조건을 잘 볼것!

반응형
Comments