핀볼 게임

핀볼 하나만 이동시키면 되는 게임이다. 따라서 현재의 핀볼 위치, 방향과 핀볼의 다음 위치만 생각해주면 된다.

막힌 부분

그런데 핀볼의 초기 위치와 방향을 임의로 설정 가능하다고 되어있는데 이 부분을 구현하지 못했다. 일단 시작위치(0,0), 방향(0)으로 다른 로직들을 구현하긴 했는데.

임의로 설정 가능 : 0인 모든 위치에 각각 4가지 방향으로 시작할 수 있고, 블랙홀과 웜볼은 없을 수도 있다. 1번~5번 블록 갯수에 대한 언급은 나오지 않았다. 따라서 N의 최대 크기 100에 따라 100x100 크기 배열 모든 칸에 4가지 방향으로 시작하는 경우의 수가 존재한다. => 4^(100*100) >>> 1억. 시작 위치&방향이 임의로 가능하다고 되있지만 모든 경우를 해볼 순 없다. => 초기 위치&방향 어떻게 시작하란 말이야!?

정답 코드 - 초기 위치&방향 선택하는 부분 : N^2 2중 for문 내에서 4가지 방향으로 모든 경우를 다 해본다...이게 어떻게 가능하지...음..문제 출제자가 입력을 크지 않게 주는 것인가..

for(int r = 0 ; r < N ; ++r) {
				for(int c = 0 ; c < N ; ++c) {
					if(map[r][c] == 0) {
						for(int d = 0 ; d < 4 ; ++d) {
							Node ball = new Node(r, c, d);
							int score = go(ball);
							ans = score > ans ? score : ans;
						}
					}
				}
			}

문제 정리

  1. 문제에서 주어진 대로 구현만 하면 되는 쉬운 문제였다. 다만 내가 잘 몰랐던 부분은, 0인칸이면 현재 방향으로 계속해서 직진하는 부분이였는데, 이것은 무한루프로 구현하는 것 까지는 ok, 그런데 다음 위치 nx,ny가 갱신되는 시점과 스코프를 잘 몰랐다.

  2. 웜볼 저장 꿀팁 : 웜볼은 2개씩, 최대 5쌍이 존재하고, 6이상 10이하인 수라는 특징을 이용하여 웜볼 번호를 인덱스로 하는 11x4 크기의 배열에 두개의 웜볼 위치 정보(x,y)를 저장할 수 있다! 이렇게 하면 웜볼 번호로 O(1)으로 위치를 바로 조회하고 바꿀 수 있다!

Last updated