본문 바로가기

코딩테스트 문제풀이

백준 16953번 A->B

728x90

문제

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

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

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

입력

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

출력

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

 

N=list(map(int,input("").split()))

count=0

while(N[0]!=N[1]):

    tmp=N[1]
    count+=1
    if N[1]%10==1:
        N[1]=N[1]//10

    elif N[1]%2==0:
        N[1]=N[1]//2


    if N[1]==tmp:
        print("-1")
        break



if N[1]!=tmp:

    print(count+1)

 

bottom -up을 사용하는것보다 top-down 을 사용하였습니다.

 

728x90

'코딩테스트 문제풀이' 카테고리의 다른 글

14916 거스름돈  (0) 2022.10.17
17413 단어뒤집기 2 백준온라인  (0) 2022.10.17
백준 17298 번 오큰수  (0) 2022.10.12
백준 5397번 키로거  (0) 2022.10.10
백준 1715번 카드정렬하기  (0) 2022.10.09