수빈이가 동생을 찾는 가장 빠른 시간 구하기.
입력 | 출력 |
---|---|
5 17 | 2 |
: nx == x*2 일 때에는 visited[nx] = visited[x], nx == x-1 or nx == x+1 일 때에는 visited[nx] = visited[x] + 1 ---> 틀렸습니다.
X-1
,X+1
을 먼저 하는 것보다는2*X
로 이동할 수 있으면 전부2*X
로 이동시키고, 그 다음X-1
,X+1
로 이동시키면 된다. ->2*X
는appendleft
그리고 visited에서 먼저 선점해야 하므로 2배 이동하는 조건문을 가장 먼저 실행.
from collections import deque
import sys
def bfs(n, k, visited):
q = deque()
q.append(n)
visited[n] = 0
while q:
x = q.popleft()
if x == k:
print(visited[x])
break
if 0<=x*2<=100000 and visited[x*2]==-1:
visited[x*2] = visited[x]
q.appendleft(x*2)
if 0<=x-1<=100000 and visited[x-1]==-1:
visited[x-1] = visited[x] + 1
q.append(x-1)
if 0<=x+1<=100000 and visited[x+1]==-1:
visited[x+1] = visited[x] + 1
q.append(x+1)
n, k = map(int, sys.stdin.readline().split())
visited = [-1]*100001 # 방문여부 및 해당 거리까지 걸리는 시간
bfs(n, k, visited)
x*2와 x-1, x+1은 각각 서로 관련이 없으므로 각각 if문.