알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 1679. 숨바꼭질

hibscus 2021. 3. 27. 18:37

 

 

 

 

 

 

처음엔 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))