[백준] 13549번 숨바꼭질 3 #Python #BFS
2023. 7. 30. 18:33ㆍBOJ
728x90
https://www.acmicpc.net/problem/13549
👉 문제 접근
n = 5, k = 17
n에서 k까지 도달할 수 있는 최소시간을 구해야하므로
근거리부터 가능한 모든 경우를 본다. (분홍색 -> 노란색 -> 보라색). 즉, BFS
dist[i] : n으로부터 i까지의 거리
visited[] : 큐에 넣으면 방문처리 -> 중복을 피할 수 있다.
목표한 숫자 k를 만나면 탐색을 멈추고 dist[k]를 출력한다.
✍️ 큐를 이용해 주변노드부터 탐색하는 BFS의 동작과정
✍️ 5부터 17까지의 최단거리를 찾고 난 뒤 dist[] 의 내용
✍️ 정답
from collections import deque
n, k = map(int, input().split())
max = 100001
dist = [0]*max
visited = [False]*max
queue = deque()
queue.append(n)
visited[n] = True
def dfs():
while queue:
x = queue.popleft()
if x == k:
return
if 0 <= 2 * x < max and not visited[2 * x]:
t = 2 * x
dist[t] = dist[x]
visited[t] = True
queue.append(t)
if 0 <= x - 1 < max and not visited[x - 1]:
t = x - 1
dist[t] = dist[x] + 1
visited[t] = True
queue.append(t)
if 0 <= (x + 1) < max and not visited[x + 1]:
t = x + 1
dist[t] = dist[x] + 1
visited[t] = True
queue.append(t)
dfs()
print(dist[k])
# for i in range(1, k+1):
# print(i, '까지의 길이 : ', dist[i])
# print()
'BOJ' 카테고리의 다른 글
백준 11725 트리의 부모 찾기 #python # BFS (0) | 2023.07.25 |
---|---|
백준 23305 수강변경 #그리디 (python) (0) | 2023.07.18 |
0415 백준 3문제 (0) | 2023.04.10 |
백준 1927 최소 힙 (python) 🥈 실버2 (0) | 2023.03.20 |
백준 13305 주유소 _ 실버3_ 그리디 (1) | 2023.03.17 |