A->B - Python

J-USER·2021년 6월 23일
0

알고리즘 문제

목록 보기
39/44
post-thumbnail

문제

정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.

2를 곱한다.
1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

입력

첫째 줄에 A, B (1 ≤ A < B ≤ 10^9)가 주어진다.

출력

A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.

문제 풀이

거꾸로 생각해보도록 하였다. 예시인 2,162를 기준으로 생각하면 2 → 4 → 8 → 81 → 162 = 5가 되는데 이것을 반대로 한번 해보자.

162가 2로 나누어 진다면, 2로 나누고 그 값을 b에 저장하고 res += 1을 수행한다.

81을 2로 나눈 경우 나머지는 1이고 10으로 나눠도 1이다. 그래서 몫인 8을 B에 저장하고 res += 1을 수행한다.

반복....

A와 B 값을 비교하여 같으면 반복문을 탈출하고 결과값을 찍는다.

A , B = map(int,input().split())
res = 1

while True :
    if A == B :
        break
    elif ( B%2 != 0 and B % 10 != 1 ) or (B < A):
        res = -1
        break
    else:
        if B % 10 == 1:
            res += 1
            B = B //10
        else:
            res += 1
            B = B//2

print(res)
profile
호기심많은 개발자

0개의 댓글