Koala - 19기/코딩테스트 심화 스터디

[백준/python] 16953 A → B

ㄱㅈㅅㅇ 2025. 8. 17. 16:05

16953번: A → B

import sys
sys.setrecursionlimit(10000)   
a,b=map(int,input().split())
ans=0
def pan(ans,a,b):
    while 1:
        if b %2 ==0:
            b//=2
            ans+=1
        else:
            b=str(b)
            if b[-1] == '1':
                b=int(b[:-1])
                ans+=1
            else:
                return -1
        
        if b <a:
            return -1
        elif b==a:
            return ans+1
        else:
            continue

print(pan(ans,a,b))

 

보통 이런 문제는 b에서 a로 가는 게 더 쉽다. 

만약 b가 2로 나눠지는 애라면 1회 사용했다고 표시하고 b를 나눠준다. 그게 아니라면 b의 끝자리가 1인지 확인하고, 맞으면 1을 빼주고 또 횟수 차감해준다. 둘다 아니면 안되는 경우다. -1을 리턴하고 끝낸다. if문을 잘 거치고 나왔을 때 아직 b가 a까지 도달하지 못했다면 계속해준다. 동일하다면 그대로 끝낸다. b가 더 작다면 어떻게 해서도 만들 수 없다. -1을 리턴하고 끝낸다.