반응형
백준 16953 [ A → B ] 문제 python 풀이
문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
예제
입력 | 출력 |
2 162 | 5 |
4 42 | -1 |
1000 40021 | 5 |
from collections import deque
A, B = map(int, input().split())
# A를 B로만들기
# 1. 2를곱하거나
# 2. 숫자 뒷 자리에 1을 추가 (숫자 * 10 + 1)
queue = deque()
queue.append((A, 1))
while True:
if len(queue) == 0:
print(-1)
break
tempA, tempCnt = queue.popleft()
if tempA > B:
continue
if tempA == B:
print(tempCnt)
break
queue.append((tempA*2, tempCnt + 1))
queue.append((tempA*10 + 1, tempCnt + 1))
bfs풀이입니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준 / Python] 1925번 삼각형 (2) | 2023.02.01 |
---|---|
[백준 / Python] 5615번 아파트 임대 (0) | 2023.01.22 |
[백준 / Python] 1780번 종이의 개수 (0) | 2023.01.15 |
[알고리즘] 알파벳 피라미드 만들기 (c언어 / 예제) (0) | 2022.02.19 |
알고리즘이란 / 알고리즘 뜻, 조건, 표현방법 (5) | 2021.02.05 |
댓글