Files
baekjoon-study/workbook_8708/silver/1697-s1.py
2026-02-23 11:14:50 +09:00

44 lines
1.3 KiB
Python

# 숨바꼭질
import sys
from collections import deque
input = sys.stdin.readline
def solution():
n, k = map(int, input().rstrip().split())
max_len = 100000
line = [0 for _ in range(max_len+1)]
move = [-1, 1]
q = deque([n])
line[n] = 1
while q:
now = q.popleft()
for m in move:
now_move = now + m
if 0 <= now_move < max_len+1 and line[now_move] == 0:
q.append(now_move)
line[now_move] = line[now] + 1
if 0 <= now*2 < max_len+1 and line[now*2] == 0:
q.append(now*2)
line[now*2] = line[now] + 1
print(line[k]-1)
return
solution()
"""
걸린 시간: 몰라
시간 복잡도: 한 지점 당 큐에 한 번씩만 들어갔다가 나오기 때문에 전체 지점만큼의 시간이 걸린다. 따라서 O(100000)이다.
해설: 특정 위치를 볼 때 그 위치로부터 //2, -1, +1 지점에서 +1 한 것들과 기존 지점까지 총 4개 값의 최소값을 가져오면서 dp 테이블을
갱신하면 될 것 같았는데, 이렇게 되면 dp 테이블을 채우는 방향에 따라 비교해야하는 4지점이 다 안 채워진 경우가 있다.
따라서 bfs로 한번 이동하는 것을 하나의 계층으로 생각해서 진행하면 된다.
"""