처음에는 BFS로 풀려고 했으나 순간이동은 시간을 세지 않는 다는 점에서 최단 시간을 확정하기 어렵다는 생각이 들었다. 그래서 다익스트라로 접근했다.
from collections import deque
def find_K():
D = [0xfffffffffff] * 100001
D[N] = 0
Q = deque()
Q.append((0, N))
while Q:
time, loc = Q.popleft()
if D[K] <= time: continue
for n_time, n_loc in [(time+1, loc+1), (time+1, loc-1), (time, loc*2)]:
if 0 > n_loc or 100000 < n_loc: continue
if D[n_loc] > n_time:
D[n_loc] = n_time
Q.append((n_time, n_loc))
return D[K]
N, K = map(int, input().split()) # 수빈, 동생
# 순간이동은 0초 , +1, -1 은 1초
print(find_K())
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 17471. 게리맨더링 (0) | 2021.05.16 |
---|---|
[백준 알고리즘] 1504. 특정한 최단 경로 (0) | 2021.05.11 |
[백준 알고리즘] 1941.소문난 칠공주 _ python (0) | 2021.04.18 |
[백준 알고리즘] 2206. 벽부수고 이동하기 (0) | 2021.04.04 |
[백준 알고리즘] 5427.불 (0) | 2021.04.04 |