문제 풀이/[BaekJoon]

[BaekJoon] 16953 A → B (Silver 2) - Python

조랩 2023. 1. 9. 23:12

문제

 

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

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

A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.


입출력 예시

 

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

출력: A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.

 

입력예시1)

2 162

출력예시1)

5

2 → 4 → 8 → 81 → 162

 

입력예시2)

4 42

출력예시2)

-1

 

입력예시3)

100 40021

출력예시3)

5

100 → 200 → 2001 → 4002 → 40021


코드

from collections import deque

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

def bfs(start):

    q = deque([])
    q.append([start, 1])
    ret = -1

    while q:
        num, cnt = q.popleft()
        if num > b: continue
        if num == b:
            ret = cnt
            break

        n1 = num * 2
        q.append([n1, cnt + 1])

        n2 = (num * 10) + 1
        q.append([n2, cnt + 1])

    return ret

print(bfs(a))

실행 화면

 


채점 결과

728x90