문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
입력 예시
2 162
출력 예시
5
문제 해결 포인트
작은 수에서 큰 수를 만드는 가장 적은 횟수 류의 문제를 풀 때는 작은 수 -> 큰 수로 가는게 아니라
큰 수 -> 작은 수로 가는게 푸는데 용이하다.
코드
# Greedy 16953 A->B
# A -> B 로 바꾸는 연산의 최솟값에 1을 더한값 출력하기
a, b = map(int, input().split())
cnt = 0
while a < b :
if b % 2 != 0 and str(b)[-1] != '1' : # 2로 나누어 떨어지지도 않고, 마지막 글자가 1도 아닐 경우
break
elif str(b)[-1] == '1' and len(str(b)) > 1 : # 마지막 글자가 1이고, b의 길이가 1보다 클 경우
tmp = str(b)
b = int(tmp[:len(tmp)-1])
cnt += 1
elif b % 2 == 0 : # 2로 나누어 떨어지는 경우
b = b // 2
cnt += 1
if a == b : print(cnt+1) else : print(-1)