[ Contents ]
1. 문제 (링크 참조)
13913번: 숨바꼭질 4
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
2. 문제 풀이
수빈이는 1초에 +1, -1, *2만큼 이동할 수 있습니다. X 지점에서 Y로 이동하는 최소 시간을 구해야 합니다.
2022.02.24 - [Algorithm] - [탐색/BFS] 백준 1697 숨바꼭질 - Python
[탐색/BFS] 백준 1697 숨바꼭질 - Python
[ Contents ] 1. 문제 (링크 참조) 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간..
star7sss.tistory.com
기존 숨바꼭질 문제에서 '경로 추적'이 추가된 문제입니다. 경로는 parents 리스트를 추가해서 추적할 수 있습니다.
3. 코드
from collections import deque
import sys
input = sys.stdin.readline
N, K = map(int, input().split()) #출발 / 도착
dist = [0] * 100001 # 최대 0부터 100000까지의 지점까지 걸리는 횟수 기록
parents = [0] * 100001 # 경로 추적
# BFS 탐색
queue = deque()
queue.append(N) # 시작점
# 큐가 빌 때까지 탐색
while queue:
x = queue.popleft()
# 도착지점이라면 탐색 종료
if x == K:
print(dist[x]) # 최적 경로
path = []
for _ in range(dist[x]+1):
path.append(x)
x = parents[x]
print(" ".join(map(str, path[::-1])))
break
# x에서 -1 또는 +1 또는 *2 탐색
for nextX in (x+1, x-1, 2*x):
# 0~100000지점 내이고, 방문하지 않았거나 동일한 탐색횟수를 가졌으면 탐색
if 0 <= nextX <= 100000 and not dist[nextX]:
dist[nextX] = dist[x] + 1 # 방문하고 횟수 1늘림
parents[nextX] = x
queue.append(nextX) # 큐에 추가
parents에 부모 노드(이전 노드)를 저장해두고, 거슬러 올라가면서 추적합니다. 만약 최적 경로가 1 -> 3 -> 5라고 합시다. 그러면 노드 5의 부모 노드는 '3'이고, 노드 3의 부모 노드는 '1'입니다. 이를 역순으로 재배열하면 1, 3, 5 최적 경로가 됩니다.
2022.03.22 - [Algorithm] - [Algorithm] 다익스트라(Dijkstra), 지름길의 지름길로 찾는 최적경로
[Algorithm] 다익스트라(Dijkstra), 지름길의 지름길로 찾는 최적경로
다익스트라는 출발지부터 목적지까지의 최적 경로를 탐색해주는 알고리즘입니다. 다익스트라의 이론적 설명과 구현 방법, 경로 추적까지 살펴보겠습니다. [ Contents ] 1. 다익스트라(Dijkstra) 알
star7sss.tistory.com
경로를 역추적하는 방법은 다익스트라 알고리즘을 설명하면서, 소개한 적이 있습니다. 더 자세한 설명은 위 글을 참조해주세요.
'Algorithm' 카테고리의 다른 글
[구현/문자열] 백준 6810 ISBN - 파이썬(Python) (0) | 2022.08.14 |
---|---|
[구현/수학] 백준 6778 Which Alien? - 파이썬(Python) (0) | 2022.08.13 |
[구현/수학] 백준 23825 SASA 모형을 만들어보자 - 파이썬(Python) (0) | 2022.08.11 |
[구현/수학] 백준 13985 Equality - 파이썬(Python) (0) | 2022.08.10 |
[탐색/BFS] 백준 12851 숨바꼭질 2 - 파이썬(Python) (0) | 2022.08.09 |
댓글