문제 출처 : www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
문제 해석 : A에서 B로 만드는데 2가지 방법을 사용할 수 있다.
1. 수를 2배로 만든다.
2. 수의 끝에 1을 붙인다.
이때 최소 횟수로 B를 만드는 것에 +1 한 수를 반환해라, 만들 수 없다면 -1을 반환해라.
문제 풀이 : BFS로 가능한 모든 경우의 수를 체크하면 되는 문제이다.
풀이 코드
from collections import deque
def find_answer(A):
visited = []
Q = deque()
Q.append([0,A])
visited.append(A)
while Q:
count, num = Q.popleft()
if num == B:
return count + 1
for next in (num * 2, int(str(num) + "1")):
if next <= B:
if next not in visited:
Q.append([count + 1, next])
visited.append(next)
return -1
A, B = map(int, input().split())
answer = find_answer(A)
print(answer)
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 14503 로봇 청소기 문제 풀이 (0) | 2021.02.08 |
---|---|
[알고리즘][Python] 백준 17144 미세먼지 안녕! 문제 풀이 (0) | 2021.02.04 |
[알고리즘][Python] 백준 15666 N과 M (12) 문제 풀이 (0) | 2021.01.31 |
[알고리즘][Python] 백준 15663 N과 M (9) 문제 풀이 (0) | 2021.01.30 |
[알고리즘][Python] 백준 15657 N과 M (8) 문제 풀이 (0) | 2021.01.30 |