n, k = map(int, input().split())
#최단 경로 찾는 건데 n은 -1, +1, *2 중에 하나 할 수 있다.
from collections import deque
arr=[0]*(100001)
def bfs(x):
queue=deque()
queue.append(x)
arr[x]=1
while queue:
x=queue.popleft()
nx=[x+1, x-1, x*2]
if x+1 == k or x-1 == k or x*2==k:
arr[k]=arr[x]+1
break
for i in nx:
if i>0 and i<len(arr) and arr[i]==0:
queue.append(i)
arr[i] = arr[x]+1
return arr[k]-1
if n==k:
print(0)
else:
print(bfs(n))
bfs로 풀었다.
주의할 점:
1. 이동 횟수 저장하는 배열인 arr의 크기를 처음에는 max(n, k)+1로 설정했었는데
n이 이동하다보면 n이나 k를 넘어설 수도 있어서 len(arr)을 10만1로 바꿨다.
2. n=k인 경우는 이동 횟수가 0으로 출력되도록 따로 설정해야 함.
3. n, k는 0부터 가능하다. 처음에는 n, k가 자연수부터 시작이라고 생각해서 arr의 인덱스 값에서 -1을 하려고 했는데 그럴 필요 없음.
'알고리즘 PS > DFS_BFS' 카테고리의 다른 글
BFS, 백준 토마토 문제 (0) | 2024.06.02 |
---|---|
백준 10026 적록색약 파이썬 (0) | 2024.05.18 |
백준 4963 섬의 개수 파이썬 (0) | 2024.05.14 |
백준 18352 특정 거리의 도시 찾기 파이썬 (0) | 2024.05.13 |
백준 토마토 문제(7576, 7569) 파이썬 (0) | 2024.05.10 |