728x90
# Baekjoon 1697번: 숨바꼭질
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
visited = [0] * 2000002
def BFS(pos):
queue = deque()
queue.append(pos)
visited[N] = 1
while queue:
c = queue.popleft()
if c == K:
return visited[c]-1
for i in (c-1, c+1, 2*c):
if visited[i] == 0 and 0 <= i < 1000001:
queue.append(i)
visited[i] = visited[c]+1
print(BFS(N))
이 문제는 BFS 알고리즘 문제이다. 처음 이 문제를 접하고 백트래킹처럼 그래프를 만든 후 이미 방문한 점이면 return 하는 방식으로 재귀함수를 만들며 해결하려 했는데, 재귀가 많이 반복돼서 while문을 이용한 BFS로 해결하게 되었다.
먼저, visited 배열과 queue를 만든 후 처음 시작점인 N을 queue에 추가한 뒤 방문했다는 것을 표시한다. 그 다음 while문을 이용해 queue의 원소를 추출해서 K와 비교하고, 다를 경우에는 다른 점으로 이동하도록 한다. 다른 점은 다시 queue의 원소로 추가한 뒤 visited 배열에 이전 점에서 1을 더한 값을 넣는다.
728x90
'1. Programming > BaekJoon' 카테고리의 다른 글
[Baekjoon/Python] 14940번: 쉬운 최단거리(BFS) (0) | 2024.10.06 |
---|---|
[Baekjoon/Python] 11724번: 연결 요소의 개수(BFS) (0) | 2024.10.05 |
[Baekjoon/Python] 1931번: 회의실 배정(Greedy) (0) | 2024.10.05 |
[Baekjoon/Python] 2178번: 미로 탐색(BFS) (2) | 2024.09.26 |
[Baekjoon/Python] 1541번: 잃어버린 괄호(Parshing) (0) | 2024.09.24 |