PS/백준

[백준] 16953번 A → B (python)

yo0oni 2023. 12. 20. 13:39

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

 

16953번: A → B

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

www.acmicpc.net

 

1. A에 2를 곱하기

2. A의 가장 오른쪽에 1을 추가하기

위 두 가지 방식만 써서 A를 B로 만드는 문제이다. 하지만 나는 B를 A로 만들어서 연산의 최솟값을 구했다.

 

B에서 A를 만들어야겠다고 생각한 가장 큰 이유는, A의 가장 오른쪽에 1을 추가하는 시기를 결정하기 어렵기 때문이다. B를 2로 나누면서 가다 보면 일의 자리 수가 1인 경우가 발생하고, 이때 1을 삭제해 주면 같은 로직으로 구현된다. 이 방법을 통해 B에서 A를 찾아나갔고, 해당 연산의 최솟값을 구했다.

 

 

소스 코드

import sys
input = sys.stdin.readline

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

count = 1
while True:
    if A > B:
        print(-1)
        break

    if A == B:
        print(count)
        break

    if B % 2 == 0: # 짝수
        B = B // 2

    elif str(B)[-1] == "1":
        B = int(str(B)[:-1])

    else:
        print(-1)
        break
    
    count += 1