백준 13549번 숨바꼭질 3
문제 풀이
- 본 문제는
다익스트라 알고리즘
을 이용하면 문제를 해결할 수 있습니다.
- 그래프 문제에서 시작 노드에서 도착 노드가 이어져 있다는 것을 응용해서 해당 문제는 특정 칸에서 갈 수 있는 경우의 수를
3가지(+1, -1, X2)
로 보면 됩니다.
코드 풀이
import sys, heapq
input = sys.stdin.readline
N, K = map(int, input().split())
INF = int(1e9)
dist = [INF] * 100001
def dijkstra(start):
q = []
heapq.heappush(q, [0, start])
dist[start] = 0
while q:
distance, now = heapq.heappop(q)
dx = [-1, 1, now]
move = [1, 1, 0]
if dist[now] < distance:
continue
for i in range(3):
if now+dx[i] > 100000 or now+dx[i] < 0:
continue
cost = distance + move[i]
if cost < dist[now+dx[i]]:
dist[now+dx[i]] = cost
heapq.heappush(q, [cost, now+dx[i]])
dijkstra(N)
print(dist[K])