💡문제접근

- 테스트케이스에 나온 그래프 정보를 위와 같이 표현할 수 있다.
- 개선된 다익스트라 알고리즘 소스코드에서 변형
- K번째 수를 구하려면 K 이하의 모든 최단 경로를 알아야하므로 a → b로 가는 배열의 크기를
K × (N+1)
크기의 2차원 리스트를 사용하면 된다.
💡코드(메모리 : 66988KB, 시간 : 2736ms)
import heapq
import sys
input = sys.stdin.readline
INF = int(1e9)
n, m, k = map(int, input().strip().split())
start = 1
graph = [[] for _ in range(n+1)]
distance = [[INF] * k for _ in range(n+1)]
for _ in range(m):
a, b, c = map(int, input().strip().split())
graph[a].append([b, c])
def dijkstra(start):
queue = []
heapq.heappush(queue, (0, start))
distance[start][0] = 0
while queue:
dist, now = heapq.heappop(queue)
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]][k-1]:
distance[i[0]][k-1] = cost
distance[i[0]].sort()
heapq.heappush(queue, (cost, i[0]))
dijkstra(start)
for i in range(1, n+1):
if distance[i][k-1] == INF:
print(-1)
else:
print(distance[i][k-1])
💡소요시간 : 1h