Hanbit the Developer

[그리디] Python - 16953번, A → B(A to B) 본문

Algorithm/백준

[그리디] Python - 16953번, A → B(A to B)

hanbikan 2021. 3. 31. 16:27
import sys
input = sys.stdin.readline


def dfs(num, cnt):
    if num == B:
        global Min
        if Min == -1:
            Min = cnt
        else:
            Min = min(Min, cnt)
        return

    nextNum = num*2
    if nextNum <= B:
        dfs(nextNum, cnt+1)
    nextNum = int(str(num)+'1')
    if nextNum <= B:
        dfs(nextNum, cnt+1)


A, B = map(int, input().split())
Min = -1
dfs(A, 1)
print(Min)

 

다음 그림은 만약 입력값이 '2 41'로 들어왔다고 했을 때의 설명이다.

기본적으로 dfs를 통해 1. num*2 2. int(str(num)+'1')일 때를 탐색해주는데, 그 값이 B보다 크면 dfs를 하지 않는다.

결국 dfs에 들어온 num이 우리가 찾고 있는 B와 일치하면 전역변수 Min을 수정해준다.