[백준] 1697 - 숨바꼭질 (Python)

[백준] 1697 - 숨바꼭질

풀이 - BFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from collections import deque

N,K=map(int,input().split())
visited=[0]*100001
queue=deque()

def bfs(x):
    queue.append((x,0))
    visited[x]=1
    while queue:
        x=queue[0][0]
        cnt=queue[0][1]
        queue.popleft()
        if x==K:
            print(cnt)
            break

        for nx in (x-1,x+1,x*2):
            if nx>=0 and nx<=100000 and visited[nx]==0:
                queue.append((nx,cnt+1))
                visited[nx]=1

bfs(N)

✍ 처음에 문제를 풀었을 때 메모리 초과 문제가 발생했었는데

  • 방문 여부를 검사하는 visited list를 통해 중복값 처리 방지
  • 다음의 x값의 범위를 0 ≤ nx ≤ 100000으로 설정

  위와 같은 방법을 통해 문제를 해결할 수 있었다.