https://www.acmicpc.net/problem/16953
- BFS 방식 활용
- que에 2배를 곱한 경우, 1을 맨 오른쪽에 추가한 경우를 추가 // 이 모든 경우는 값이 증가하는 방향
- que에서 나온 숫자가 목표인 B 보다 클 경우 더 이상의 연산을 하여도 B가 될 수 없기에 continue를 이용하여 연산 포기
from collections import deque
def transnum():
que = deque()
que.append(A)
cnt = 0
while que:
cnt += 1
for _ in range(len(que)): # BFS 깊이를 계산하기 위해 FOR문 사용
t = que.popleft()
if t == B: # 연산 결과가 B가 될 경우
return cnt
if t > B: # 가망이 없을 경우
continue
que.append(2*t) # 2배곱
que.append(int(str(t)+'1')) # 오른쪽에 1 추가
return -1 # while que에서 빠져 나온 결과이므로 도달 할 수 없을 경우
A,B = map(int,input().split())
print(transnum())
'알고리즘 문제 풀이 > Python' 카테고리의 다른 글
python 백준 15663 N과 M (9) (0) | 2022.05.12 |
---|---|
python 백준 11053 가장 긴 증가하는 부분 수열 (0) | 2022.05.11 |
python 백준 15652 N과M(4) (0) | 2022.05.05 |
python 15650 N과 M(2) (0) | 2022.05.04 |
python 백준 1753 최단경로 (0) | 2022.05.03 |