처음엔 DFS로 접근할 수 있을 것 같아 DFS로 풀었는데, 시간이 너무 오래걸려 시간초과가 떴다.
최단거리엔 역시 BFS이구나를 깨닫고 다 지우고 BFS로 접근했다.
아래처럼 범위를 설정하지 않으면 visited때문에 런타임에러가 뜬다.
" if num > 100000 or 0 > num: continue "
from collections import deque
def BFS(n):
cnt = 0
Q.append(n)
while Q:
for _ in range(len(Q)):
num = Q.popleft()
if num == k:
return cnt
if num > 100000 or 0 > num: continue
if visited[num] == 1: continue
visited[num] = 1
if num > k :
Q.append(num - 1)
else:
Q.append(num + 1)
Q.append(num - 1)
Q.append(num * 2)
cnt += 1
n, k = map(int, input().split())
Q = deque()
visited = [0] * 100001
print(BFS(n))
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 13706. 제곱근 (0) | 2021.03.30 |
---|---|
[백준 알고리즘] 7559. A -> B (0) | 2021.03.30 |
[백준 알고리즘] 15663. N과 M (9) (0) | 2021.03.27 |
[백준 알고리즘]1759.암호만들기 - 파이썬 (0) | 2021.03.25 |
[백준 알고리즘] 2589. 보물섬 _ 파이썬 (0) | 2021.03.25 |