정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
풀이
마지막 자리에 추가하는 숫자가 1이기 때문에 2를 곱해도 짝수 혹은 마지막 자리가 1인 홀수일 수밖에 없다
따라서 B가 짝수라면 2로 나누어주고 짝수가 아니고 마지막 숫자가 1이라면 1을 지워준다
이외의 경우 ex) 163 에 포함되는 수들도 입력으로 들어올 수 있으므로 break를 해주는 것이 중요하다
코드
import sys
a, b = map(int, sys.stdin.readline().split())
cnt = 0
while a < b:
if b%2 == 0:
b = b//2
elif str(b)[-1] == "1":
b = int(str(b)[:-1])
else:
break
cnt += 1
if a == b:
print(cnt+1)
else:
print(-1)