[백준/Python] 16953 - A→B

고운·2024년 4월 1일

알고리즘

목록 보기
75/94

문제

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

  • 2를 곱한다.
  • 1을 수의 가장 오른쪽에 추가한다.

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)
profile
무럭무럭 성장하는 개린이 공부 공간

0개의 댓글