[문제]
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRF8s6ezEDFAUo
[풀이]
1) 0 : 빈 공간(구슬의 처음 시작위치가 될 수 있는 공간) / 1~5 : 블록 / 6~10 : 웜홀 / -1 :블랙홀 (종료공간)
2) 총 N개의 구슬로 게임을 진행할 수 있고 구슬이 처음 시작위치에 오거나, 블랙홀을 만나면 게임이 종료된다.
3) 시작위치와 방향은 임의로 진행한다. (시간복잡도 : O(n^2*4))
4) tip?? 은 벽에 부딪혀도 방향이 반대로 전환되기 때문에
(0,0) ~ (0,n+1) / (n+1 ~0) ~ (n+1, n+1) 을 모두 블록 5로 만들어준다. (블록 5는 구슬이 부딪히면 반대 방향으로 전환된다.)
=> 따로 인덱스 초과 처리를 하지 않아도 된다.
5) 웜홀은 항상 쌍으로 제시된다. 총 5개의 인덱스를 가진 bool flag 배열을 사용하여 flag가 false라면 아직 쌍이 되는 웜홀이 안나왔으므로 true로 값을 바꿔주고 현재의 x,y좌표를 저장한다.
6) 벽에 부딪힌 횟수 최대가 되는 값을 구한다.
* changeDir() 은 나아가야할 방향이 각 블록마다 어느 방향으로 전환되는 지를 반환한다.
-> (동) 쪽으로 나아가고 있는 중이라면 블록 1,2,5 는 반대방향으로 전환되고
3은 남쪽으로 / 4는 북쪽으로 전환된다. (나아가고 있는 방향이라는 것을 생각해야한다. .)
'SWEA > 삼성SW역량테스트 C++' 카테고리의 다른 글
[SWEA] 보호필름 (0) | 2019.08.01 |
---|---|
[SWEA] 줄기세포배양 (0) | 2019.07.31 |
[SWEA] 디저트가게 (0) | 2019.07.29 |
[SWEA] 무선충전 (0) | 2019.07.29 |
[SWEA] 탈주범 검거 (0) | 2019.07.29 |