https://www.acmicpc.net/problem/1697
import sys
from collections import deque
# 수빈이는 현재점 N (0 <= N <= 100,000)
# 동생은 점 K (0 <= K <= 100,000)
# 수빈이는 걷거나 순간이동
# 수빈이의 위치가 X 위치일 때 걷는다면 1초 후에 X - 1, 또는 X + 1 로 이동
# 순간이동을 하는 경우에는 1초 후에 2 * X의 위치로 이동
# 수빈이와 동생의 위치, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후?
def bfs(s, target):
q = deque()
q.append(s)
visited = [0] * 200001
while q:
m = q.popleft()
if m == target:
return visited[m]
else:
for i in (m - 1, m + 1, m * 2):
if 200001 > i >= 0 == visited[i]:
visited[i] = visited[m] + 1
q.append(i)
return -1
n, k = map(int, sys.stdin.readline().split())
ans = bfs(n, k)
print(ans)
'자료구조 & 알고리즘 관련 > 코딩테스트' 카테고리의 다른 글
토마토 (0) | 2023.02.08 |
---|---|
나이트의 이동 (0) | 2023.02.07 |
단지번호붙이기 (0) | 2023.02.05 |
바이러스 (0) | 2023.02.05 |
알고리즘 수업 - 너비 우선 탐색 2 (0) | 2023.02.05 |