백준 1697 - 숨바꼭질
🔐 백준 1697 - 숨바꼭질
https://www.acmicpc.net/problem/1697
🔑 풀이
2차원 배열에서의 BFS만 너무 익숙해서 처음에는 이 문제를 BFS를 통해 풀 수 있다는
발상을 떠올리지 못했다. 수빈이는 각 초마다 +1, -1, ×2 의 행동 중 한 가지를 통해
다음 위치로 나아갈 수 있으므로, BFS로 처리할 수 있다. 방문한 위치 배열에 방문에 걸린
시간을 넣고, 방문하지 않은 위치들에 방문하다가 동생의 위치에 방문할 경우 종료하면 된다.
🧩 처음 코드
처음 코드를 구현했을 때는 수빈이와 동생의 위치가 같은 경우에 대한 처리를 따로 해주었고, 방문 배열의
기본값을 0으로 두어 처음 수빈이의 위치의 값을 1로 두었다. 이렇게 풀 경우에 시작 위치의 시간을 1로
둔 것이므로 답에서 1을 빼야하는 지저분한 코드가 되었다. 또한 dx[3] 배열을 두어 for문 안에서 ×2를
처리하기 위해 if-else를 처리하는 코드를 추가할 수 밖에 없었다.
🧩 개선된 코드
방문 배열의 기본값을 -1로 초기화하였고, dx 배열의 사용 대신 for문 안에서 해결해 주었다.
또한, while 문의 종료 조건을 동생이 있는 위치의 시간이 바뀐 경우로 두어, 처음에 따로 수빈이와
동생의 위치가 같은 경우의 예외 처리를 해 줄 필요가 없게 되었다.
Leave a comment