44 lines
1.3 KiB
Python
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로 한번 이동하는 것을 하나의 계층으로 생각해서 진행하면 된다.
|
|
""" |