코딩하는 해맑은 거북이
[Python] 숨바꼭질 - 백준 (BFS) 본문
해당 글은 백준 1697번 문제 '숨바꼭질'을 다룬다.
문제
https://www.acmicpc.net/problem/1697
설명
BFS로 x-1, x+1, 2*x의 경우로 이동했을 경우의 최소값을 업데이트하며 구한다.
이때 방문한 경우를 체크해야 메모리 초과 문제가 나타나지 않는다.
코드
from collections import deque
n, k = map(int, input().split())
max = 100000
def bfs(x):
q = deque()
q.append(x)
visited[x] = True
while q:
x = q.popleft()
if x == k:
return
if x-1 >= 0 and visited[x-1] == False:
q.append(x-1)
dist[x-1] = min(dist[x]+1, dist[x-1])
visited[x-1]=True
if x+1 <= max and visited[x+1] == False:
q.append(x+1)
dist[x+1] = min(dist[x]+1, dist[x+1])
visited[x+1] = True
if 2*x <= max and visited[2*x] == False:
q.append(2*x)
dist[2*x] = min(dist[x]+1, dist[2*x])
visited[2*x] = True
dist = [100001]*(max+1)
visited = [False]*(max+1)
dist[n]=0
bfs(n)
print(dist[k])
'코딩테스트' 카테고리의 다른 글
[Python] 포도주 시식 - 백준 (DP) (0) | 2022.12.15 |
---|---|
[Python] 정수 삼각형 - 백준 (DP) (0) | 2022.12.14 |
[Python] 단지번호붙이기 - 백준 (DFS) (0) | 2022.12.11 |
[Python] 미로 탐색 - 백준 (BFS) (0) | 2022.12.11 |
[Python] 인구 이동 - 백준 (BFS) (0) | 2022.12.10 |
Comments