백준

16953번 A->B

판다꼬마 2022. 5. 1. 20:31
728x90

 

https://www.acmicpc.net/problem/16953

 

 

내 풀이

a, b=map(int,input().split())

result=1

while 1:
    if (a==b):
        break
    elif (b%2 !=0 and b%10!=1) or (a>b):
        result=-1
        break
    else:
        if (b%10==1):
            b=b//10
            result+=1
        else:
            b=b//2
            result+=1

print(result)

해결 방법

a ->b로 생각하는 하는 것이 아니라 뒤에서부터 앞으로 역으로 생각을 해서 풀면 그렇게 어렵지 않은 문제였다.

이 방법을 생각하지 못해 많이 시간이 들었다.

 

 

구글 풀이

 

a, b=map(int,input().split())

index=1

while a<b:
    if b%2==0:
        b=b//2
    elif str(b)[-1]=='1':
        b=int(str(b)[:-1])
    else:
        break
    index+=1
    
if a==b:
    print(index)
else:
    print(-1)

처음에는 이런 방법으로 시도를 했었다.

b를 문자열로 변환 후 마지막 문자가 1이면 제일 뒷자리를 삭제하려는 방법을 사용하려고 했는데

내 맘대로 코드가 짜여지지 않아 위에 있는 코드대로 작성을 하였다.

 

느낀 점

str(b)[-1]은 제일 뒷자리를 지칭

b=int(str(b)[:-1])은 제일 뒷자리 삭제

 

728x90