
문제
https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net

결과

풀이
A, B = map(int, input().split())
answer = 1
while A < B:
if B % 10 == 1:
B //= 10
answer += 1
elif B % 2 == 0:
B //= 2
answer += 1
else:
answer = -1
break
if B < A:
answer = -1
print(answer)
A 에서 B가 아닌 B에서 A로 생각한다면 쉽게 풀 수 있는 문제이다.
먼저 B의 1의자리수가 1이면 1을 제거해주는것을 우선순위로, 그 다음 짝수만 2로 나눌 수 있으니 2로 나눠주는 연산을 한다. 103등의 수가 오면 더 이상 연산을 할 수 없으니 -1을 출력하도록 한다. 이 연산을 B가 A보다 작아질때까지 수행하고 만약 A == B가 아닌 B < A가 된다면 -1을 출력하도록 다시 한 번 더 확인 한다.
'알고리즘 > 그리디' 카테고리의 다른 글
| [백준][python] 9009 피보나치 (0) | 2022.03.31 |
|---|---|
| [백준][python] 11497 통나무 건너뛰기 (0) | 2022.03.24 |
| [백준][python] 1449 수리공 항승 (0) | 2022.03.21 |