Coding Test/BaekJoon_Python
백준 16953 <A -> B> Python
JunOnJuly
2023. 11. 18. 19:55
728x90
https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
2를 곱한 수와 10을 곱하고 1을 더한 수가 같을 수 없다는 점을 착안하고 목적수에 도달만 하면 무조건 리턴하게 하면 됩니다. 처음에는 dp 를 사용하려 했지만 메모리 초과때문에 저장하지 않고 비교만 해야합니다.
from collections import deque
def solution(A, B):
# 큐
queue = deque([[A, 1]])
# 계산
while True:
# 큐가 비면 끝
if not queue:
return -1
# 현재 수, 카운트
now_num, cnt = queue.popleft()
# 목적수에 도달하면 리턴
if now_num == B:
return cnt
# 메모 비교 및 최신화
# x2
if now_num*2 <= B:
# 큐에 추가
queue.append([now_num*2, cnt + 1])
# x10 + 1
if now_num*10 + 1 <= B:
# 큐에 추가
queue.append([now_num*10 + 1, cnt + 1])
A, B = map(int, input().split())
print(solution(A, B))
728x90