728x90
문제 출처: https://www.acmicpc.net/problem/16953
문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
정답
from collections import deque
a,b = map(int,input().split())
deq = deque()
deq.append((a,1))
while deq:
n, cnt = deq.popleft()
if n > b:
continue
if n == b:
print(cnt)
break
deq.append((int(str(n)+"1"), cnt+1))
deq.append((n*2, cnt+1))
else:
print(-1)
deq의 값을 늘려가면서 값이 b와 같다면 cnt를 출력하고 아닐 경우 -1을 출력
728x90
'코딩 > 백준' 카테고리의 다른 글
[백준/파이썬/브루트포스] 17626번 Four Squares 코딩테스트 연습풀이 (0) | 2022.07.16 |
---|---|
[백준/파이썬/DP] 11660번 구간 합 구하기 5 코딩테스트 연습풀이 (0) | 2022.07.15 |
[백준/파이썬/자료구조] 7785번 회사에 있는 사람 코딩테스트 연습풀이 (0) | 2022.07.13 |
[백준/파이썬/브루트포스] 2503번 숫자 야구 코딩테스트 연습풀이 (0) | 2022.07.12 |
[백준/파이썬/DP] 11048번 이동하기 코딩테스트 연습풀이 (0) | 2022.07.11 |