알고리즘 문제 풀이/Python

python 백준 16953 A - > B

맛대 2022. 5. 7. 21:13

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

  • BFS 방식 활용
  • que에 2배를 곱한 경우, 1을 맨 오른쪽에 추가한 경우를 추가 // 이 모든 경우는 값이 증가하는 방향
  • que에서 나온 숫자가 목표인 B 보다 클 경우 더 이상의 연산을 하여도 B가 될 수 없기에 continue를 이용하여 연산 포기
from collections import deque
def transnum():
    que = deque()
    que.append(A)
    cnt = 0
    while que:
        cnt += 1
        for _ in range(len(que)):               # BFS 깊이를 계산하기 위해 FOR문 사용
            t = que.popleft()
            if t == B:                          # 연산 결과가 B가 될  경우
                return cnt
            if t > B:                           # 가망이 없을 경우
                continue
            que.append(2*t)                     # 2배곱
            que.append(int(str(t)+'1'))         # 오른쪽에 1 추가
    return -1                                   # while que에서 빠져 나온 결과이므로 도달 할 수 없을 경우

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