[백준/python/16953] A->B

bej_ve·2022년 5월 5일
0

python알고리즘

목록 보기
26/46

문제링크 : A->B

문제

이번문제는 a와 b라는 두 수가 주어지면 2가지 연산방법을 최소로 사용해서 a를 b로 만드는 것이다.
*** 연산방법 ***
1. a에 2를 곱한다.
2. a의 가장 오른쪽에 1을 넣는다.

해결

1번과 2번 방법 중에서 2번 방법이 더 빠르게 수를 증가시킬 수 있으므로 2번 방법에 우선순위를 둔다. 그리고 b에서 a를 만드는 방법으로 거꾸로 접근했다. 2번 방법을 사용할 수 있다면 b를 10으로 나눈 나머지가 1이 될 것이고 1번 방법을 사용할 수 있다면 b를 2로 나눈 나머지가 0이 된다.
import sys
input=sys.stdin.readline
a,b=map(int, input().split())
count=1

while b!=a:
    if a>b:
        count=-1
        break
    if b%10==1:
        b=b//10
        count+=1
    else:
        if b%2==0:
            b=b//2
            count+=1
print(count)

0개의 댓글