# 문제
백준166953 A->B 파이썬 풀이
# 코드
'''
- BFS를 이용한 전형적인 풀이 같다.
'''
import sys
from collections import deque
from collections import defaultdict
A, B = map(int, sys.stdin.readline().split())
dq = deque()
visit = defaultdict(bool)
dq.append((A, 1))
visit[A] = True # 초기 방문
while len(dq) != 0:
cur = dq.popleft() # ( node, cnt )
next1 = (cur[0] * 2, cur[1] + 1)
next2 = ((cur[0] * 10) + 1, cur[1] + 1)
if next1[0] == B or next2[0] == B:
print(next1[1])
exit()
if visit[next1[0]] == False and next1[0] <= B:
dq.append(next1)
visit[next1[0]] = True
if visit[next2[0]] == False and next2[0] <= B:
dq.append(next2)
visit[next2[0]] = True
print(-1)
# 풀이
- BFS를 이용한 전형적인 최단거리 탐색이다.
- next로 append할 조건에 유의한다. *2와 *10 + 1 두가지 경우이다.
- 종료조건에 대한 고민이 필요하며, 종료조건은 B의 값을 넘었을때이다. 다시 뒤로 돌아올 일은 없기 때문에 해당 값을 지나치면 풀 수 없는 문제다.
'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글
[백준1149&파이썬] DP를 사용할때 확정되는 값에 대한 명확한 근거를 찾자 (1) | 2023.05.08 |
---|---|
[백준1991&파이썬] 파이썬에서 이진트리의 전위,중위,후위 간단히 수행해보자. (0) | 2023.05.06 |
[백준2407&파이썬] 조합의 경우의 수를 구할때는 수학 공식을 이용하자 (0) | 2023.05.04 |
[백준5525&파이썬] 문자열을 탐색하는 방법(KMP를 시도했으나 실패..) (1) | 2023.05.03 |
[백준7662&파이썬] 이중 우선순위 큐를 만들고 관리하기(중복값 처리에 대해 항상 생각하자) (0) | 2023.05.02 |