Home 백준 16953번 A → B
Post
Cancel

백준 16953번 A → B

정보

문제 바로가기 [클릭]

난이도: Silver1

관련 개념: #그래프 이론 #그리디 알고리즘 #그래프 탐색 #너비 우선 탐색


조건

시간 제한메모리 제한
2 초512 MB

문제

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

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

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


입력

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


출력

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


예제 입출력 1

입력

1
2 162

출력

1
5

2 → 4 → 8 → 81 → 162


예제 입출력 2

입력

1
4 42

출력

1
-1

예제 입출력 3

입력

1
100 40021

출력

1
5

100 → 200 → 2001 → 4002 → 40021


코드(파이썬)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a, b = map(int, input().split())
cnt = 1
result = -1

while ((b%10 == 1) or (b%2 == 0)) and b > 0:
    if a == b:
        result = cnt
        break
    
    b //= 2 if b%2 == 0 else 10
    
    cnt += 1

if a == b:
    result = cnt
    
print(result)


특이사항

  • b에서부터 거꾸로 출발하는 경우, 선택지가 1개로 고정되어 보다 단순한 풀이 가능

참고문헌

-

This post is licensed under CC BY 4.0 by the author.

백준 9935번 문자열 폭발

백준 9663번 N-Queen

Comments powered by Disqus.