import sys
from collections import deque
sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline
N, K = map(int, input().split())
visited = [False] * 100001
def bfs():
while queue:
num = queue.popleft()
if 0 <= num <= 100000:
if num == K:
break
n1 = num + 1
n2 = num - 1
n3 = num * 2
if visited[n1] != False:
visited[n1] = min(visited[num] + 1, visited[n1])
else:
visited[n1] = visited[num] + 1
if visited[n2] != False:
visited[n2] = min(visited[num] + 1, visited[n2])
else:
visited[n2] = visited[num] + 1
if visited[n3] != False:
visited[n3] = min(visited[num] + 1, visited[n3])
else:
visited[n3] = visited[num] + 1
queue.append(n1)
queue.append(n2)
queue.append(n3)
queue = deque()
queue.append(N)
visited[N] = 0
bfs()
print(visited[K])
세상 원시적으로 풀었다. 몇가지 조건을 추가해주면 될 것 같아서 추가 해주다보니 이미 내 코드가 잘 못 되었다는 것을 직감했다. 역시 index error가 발생했다.
이유는 test case에 음수가 들어갈 경우 visited 배열에 없기 때문이다.
import sys
from collections import deque
def bfs(v):
q = deque([v]) # 큐 구현을 위해 deque 사용
while q:
v = q.popleft()
if v == k: # 도착지점에 도착하면 종료
return visited[v]
# 참고 블로그 링크에 설명이 잘 되어 있다. 이런 식이 나오는구나..
for i in (v-1, v+1, 2*v):
if 0 <= i <= 100000 and not visited[i]:
visited[i] = visited[v] + 1
q.append(i)
n, k = map(int, sys.stdin.readline().split())
visited = [0 for i in range(100001)] # 방문을 체크하기 위해 배열 생성 100000이 아니라 100001인 이유는 100000을 처리해줘야하기 때문에!
print(bfs(n))
문제 푸는 아이디어 참고 블로그
참고 블로그