https://www.acmicpc.net/problem/13549
- 그래프 이론
- 자료 구조
- 그래프 탐색
- 너비 우선 탐색
- 다익스트라
- 0-1 너비 우선 탐색
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
visited = [-1]*100001
visited[N] = 0
q = deque([N])
while q:
x = q.popleft()
if x == K:
print(visited[x])
break
if 0 <= x * 2 < 100001 and visited[x*2] == -1:
visited[x*2] = visited[x]
# 0 - 1 BFS
# 가중치가 0인 것은 큐의 뒤가 아니라 앞에 넣는다
q.appendleft(x*2)
if 0 <= x - 1 < 100001 and visited[x-1] == -1:
visited[x-1] = visited[x] + 1
q.append(x-1)
if 0 <= x + 1 < 100001 and visited[x+1] == -1:
visited[x+1] = visited[x] + 1
q.append(x+1)
visited[x] == -1
이면 방문하지 않은 경우, visited[x] != -1
이면 x를 방문하는 최소 시간으로 저장하는 경우라면 순간이동을 하는 x*2
부터 검사해야한다!1 2
로 주어질 때, 걷는 경우인 x+1
를 먼저 검사해주면 visited[1+1]
이 더이상 -1이 아니게 되어, 답인 0이 아닌, 1이 출력되게 된다.