[Baekjoon] A → B / Python, 파이썬 / 16953
2022. 12. 22. 02:39ㆍBaekjoon/Silver
728x90
반응형
https://www.acmicpc.net/problem/16953
문제 설명
더보기
문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
예제 입력 1
2 162
예제 출력 1
5
2 → 4 → 8 → 81 → 162
예제 입력 2
4 42
예제 출력 2
-1
예제 입력 3
100 40021
예제 출력 3
5
100 → 200 → 2001 → 4002 → 40021
문제 풀이
import sys
from collections import deque
input = sys.stdin.readline
A, B = map(int, input().split())
def bfs(x):
q = deque([(x, 1)])
while q:
now, cnt = q.popleft()
if now == B:
return cnt
elif now < B:
cnt += 1
q.append((now*2, cnt))
q.append((now*10 + 1, cnt))
else: continue
return -1
print(bfs(A))
728x90
반응형
'Baekjoon > Silver' 카테고리의 다른 글
[Baekjoon] 이장님 초대 / Python, 파이썬 / 9237 (0) | 2023.01.03 |
---|---|
[Baekjoon] 결혼식 / Python, 파이썬 / 5567 (0) | 2022.12.26 |
[Baekjoon] 단지번호붙이기 / Python, 파이썬 / 2667 (0) | 2022.12.17 |
[Baekjoon] 통나무 건너뛰기 / Python, 파이썬 / 11497 (0) | 2022.12.17 |
[Baekjoon] 두 수의 합 / Python, 파이썬 / 3273 (0) | 2022.12.15 |