개발/algorithm
[ 백준 16953번 ] A->B - python
zzi_on2
2022. 1. 25. 14:13
문제 링크
https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
풀이
프로그래머스 '타겟 넘버'와 유사한 문제
https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
위 문제를 풀었어서 그런지 쉽게 풀었다.
단 만들기 불가능할 때를 대비하여 큐에 삽입해 줄때 b보다 작거나 같은 수만 넣어주어야 한다.
from collections import deque
a, b = map(int,input().split())
q = deque()
# 숫자와 인덱스 저장
q.append((a, 1))
result = False
while q:
num, index = q.popleft()
if num == b:
print(index)
result = True
break
else:
# b보다 작거나 같은 경우에만 큐에 넣어줌
if num * 2 <= b :
q.append((num*2, index +1))
if int(str(num)+'1') <= b :
q.append((int(str(num)+'1'), index+1))
if result == False:
print(-1)