102. 다익스트라 최단경로
Hard
바이브코딩
MCPGraphAlgorithm
문제 설명
[문제]
가중치 그래프에서 최단 경로를 찾는 다익스트라(Dijkstra) MCP 서버를 구현한다. 그래프는 노드(정점)들과 노드 사이를 잇는 방향 엣지(간선)로 이루어지며, 각 엣지에는 이동 비용을 뜻하는 가중치(0 이상의 정수)가 붙는다. 다익스트라 알고리즘은 시작 노드에서 다른 노드까지의 최단(비용 합이 최소인) 경로를 구한다. 예를 들어 A->B(5), B->C(3)이면 A에서 C까지 최단 거리는 8이다.
엣지는 단방향이다(A->B를 추가해도 B->A는 생기지 않는다). 서버는 인접 리스트 형태의 그래프를 유지하며 시작 시 비어 있다.
[구현할 함수]
- add_edge(from_node: str, to_node: str, weight: int) -> int
from_node에서 to_node로 향하는 가중치 엣지를 추가한다. 추가 후 전체 엣지 개수를 반환한다.
- shortest_path(start: str, end: str) -> int
start에서 end까지의 최단 거리를 반환한다. 도달할 수 없으면 -1.
- get_all_distances(start: str) -> [노드, 거리] 쌍의 배열
start에서 도달 가능한 모든 노드에 대해 [노드 이름, 거리(문자열)] 쌍을 노드 이름 오름차순으로 정렬해 담은 배열을 반환한다. 거리는 숫자가 아니라 문자열로 표기한다. 도달 가능한 노드가 없으면 빈 배열.
[입력·상태]
노드 이름은 문자열, 가중치는 0 이상의 정수다. 그래프는 호출 간에 유지된다.
[제약]
- 그래프가 비어 있거나 경로가 없으면 shortest_path는 -1을 반환한다.
- get_all_distances의 각 원소는 ["노드이름", "거리"] 형태이며 거리 값도 문자열로 변환한다. 결과는 노드 이름 기준 정렬.
[힌트] 우선순위 큐(최소 힙)를 쓰면 효율적이다 (Python: heapq / C++: std::priority_queue / Java: java.util.PriorityQueue).
[예시]
add_edge("A", "B", 5) -> 1
(빈 그래프) shortest_path("A", "B") -> -1 # 도달 불가
(빈 그래프) get_all_distances("A") -> []
로그인하고 풀기
AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.