본문 바로가기

SWEA/삼성SW역량테스트 C++

[SWEA] 핀볼게임

[문제]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRF8s6ezEDFAUo

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

 

[풀이]

 

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