Programming/백준
[실버 2] 백준 16953 - A → B (파이썬)
pental
2025. 5. 7. 18:18
https://www.acmicpc.net/problem/16953
풀이
정수 A를 B로 만들기 위해 사용할 수 있는 연산은
- A → A * 2
- A → A * 10 + 1
최소한의 연산 횟수로 A를 B로 만들고 싶다. 만들 수 없다면 -1을 출력.
이 코드는 B에서 A로 거꾸로 줄여나가는 방식
왜냐하면 A에서 B로 모든 경우를 시도하면 탐색 공간이 매우 커질 수 있기 때문
주요 아이디어
- B를 줄여가면서 A가 될 수 있는지 확인한다.
- 가능한 줄이는 방법
- B % 10 == 1 → 끝자리가 1이면 B // 10
- B % 2 == 0 → 짝수면 B // 2
- 그 외에는 더 이상 줄일 수 없으므로 중단
코드
# 백준 16953 - A -> B
# 분류 : 그래프
A, B = map(int, input().split())
count = 1
while B > A :
if B % 10 == 1 :
B //= 10
elif B % 2 == 0 :
B //= 2
else :
break
count += 1
print(count if B == A else -1)