[백준] 1697번 : 숨바꼭질
2021. 4. 26. 18:57ㆍ백준

접근법
- 처음에는 2중 배열로 바꿔서 계산을 해야 하나 고민했는데 그럴 필요가 없음을 깨달았다. (2중 배열로 바꾸면 배열의 사이즈가 계속 달라지기 때문에 불가능)
- 배열을 100001의 크기로 만들고 visit[5](출발지)의 값을 1로 설정한다.
- queue는 deque를 import하여 만들어 주고 queue에 출발지 값(= 5)을 넣는다.
- 평범한 BFS처럼 queue에서 값을 하나씩 빼가면서 진행한다.
- val + 1이 배열의 범위를 넘지 않고, 방문한 적이 없다면 visit[val + 1]을 visit[val] + 1의 값을 넣어준다.
- 그 후 val + 1에서부터 다시 탐색을 하기 위해 queue에 val + 1을 넣어준다.
- val - 1과 val * 2도 같은 방법으로 탐색을 한다.
- visit[K] - 1을 출력해준다.(visit[N]의 값이 1이었기 때문에 - 1을 해줘야 함.)
풀이
from collections import deque
N, K = map(int, input().split())
visit = [0 for _ in range(100001)]
visit[N] = 1
queue = deque()
queue.append(N)
while queue :
val = queue.popleft()
if 0 <= val + 1 < 100001 and visit[val + 1] == 0 :
visit[val + 1] = visit[val] + 1
queue.append(val + 1)
if 0 <= val - 1 < 100001 and visit[val - 1] == 0 :
visit[val - 1] = visit[val] + 1
queue.append(val - 1)
if 0 <= val * 2 < 100001 and visit[val * 2] == 0 :
visit[val * 2] = visit[val] + 1
queue.append(val * 2)
print(visit[K] - 1)
결과

'백준' 카테고리의 다른 글
| [백준] 2805번 : 나무 자르기 (0) | 2021.05.07 |
|---|---|
| [백준] 2206번 : 벽 부수고 이동하기 (0) | 2021.04.27 |
| [백준] 14502번 : 연구소 (0) | 2021.04.23 |
| [백준] 7576번 : 토마토 (0) | 2021.04.23 |
| [백준] 10844번 : 쉬운 계단 수 (0) | 2021.04.22 |