BFS를 사용! 두배한 것은 0초만에 된다는 것이 포인트!
- 방문 여부 Check 배열과 담을 queue 배열을 생성한다
- 2배는 0초만에 이루어지므로 먼저 계산되어야하므로 queue 앞으로 넣어준다.
- +1과 -1 queue 뒤로 넣어준다.
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
check = [False]*200001
queue = deque([[N, 0]])
def insertque(q, x, c, twice):
if 0 <= x <=200000 and not check[x]:
check[x] = True
if twice:
q.appendleft([x, c])
else:
q.append([x, c])
check[N] = True
answer = 0
while queue:
pos, cnt = queue.popleft()
if pos == K:
answer = cnt
break
insertque(queue, 2*pos, cnt, True)
insertque(queue, pos-1, cnt+1, False)
insertque(queue, pos+1, cnt+1, False)
print(answer)
'개발 > 알고리즘' 카테고리의 다른 글
[백준 1446] 지름길 (python) (2) | 2021.04.18 |
---|---|
[백준 1197] 최소 스패닝 트리 (python) (0) | 2021.04.18 |
[백준 12865] 평범한 배낭 (python) (0) | 2021.04.08 |
[백준 2206] 벽 부수고 이동하기 (python) (0) | 2021.04.07 |
[백준 9251] LCS (python) (0) | 2021.04.07 |
최근댓글