https://www.acmicpc.net/problem/16953
- 그래프 이론
- 그리디 알고리즘
- 그래프 탐색
- 너비 우선 탐색
import sys
from collections import deque
input = sys.stdin.readline
A, B = map(int, input().split())
def bfs(num):
q = deque([])
visited = set()
q.append((num, 0))
visited.add(num)
while q:
num, cnt = q.popleft()
if num == B:
return cnt + 1
x = num*2
y = num*10 + 1
if x <= B and x not in visited:
visited.add(x)
q.append((x, cnt+1))
if y <= B and y not in visited:
visited.add(y)
q.append((y, cnt+1))
return -1
print(bfs(A))
A
에서 시작하는 BFS를 진행한다.(num(숫자), cnt(연산횟수))
를 담는다.num
이 B
가 되면 cnt + 1
을 리턴한다.num * 2
, num * 10 + 1
숫자를 방문한 적 없고, B 이하라면 큐에 (num * 2, cnt + 1), (num * 10 + 1, cnt + 1)
를 담는다.