728x90
반응형
문제 링크
정답 코드는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import sys
import math
import heapq
def dijkstra(graph, n, source, sink1, sink2):
dist = [math.inf] * n
pq = []
dist[source] = 0
heapq.heappush(pq, (0, source))
while len(pq) != 0:
cost, node = heapq.heappop(pq)
for i in range(1, n):
nextCost = dist[node] + graph[node][i]
if nextCost < dist[i]:
dist[i] = nextCost
heapq.heappush(pq, (nextCost, i))
return dist[sink1], dist[sink2]
def solve():
n, e = map(int, sys.stdin.readline().rstrip().split())
graph = [[math.inf] * (n+1) for _ in range(n+1)]
for _ in range(e):
a, b, c = map(int, sys.stdin.readline().rstrip().split())
graph[a][b] = c
graph[b][a] = c
v1, v2 = map(int, sys.stdin.readline().rstrip().split())
a, d = dijkstra(graph, n+1, 1, v1, v2)
b, f = dijkstra(graph, n+1, v1, v2, n)
c, e = dijkstra(graph, n+1, v2, n, v1)
rst = min(a+b+c, d+e+f)
if rst != math.inf:
print(rst)
else:
print(-1)
solve()
|
cs |
728x90
전형적인 그래프 최단거리 문제로 가중치가 모두 양수인 것을 고려하여 다익스트라 알고리즘을 이용하여 풀 수 있는 문제입니다.
다익스트라는 기업 코딩테스트에서 매우 자주 출제되는 문제이기 때문에 거의 외우는 수준으로 숙달하시기 바라며,
priority queue 자료구조를 쉽게 사용할 수 있는 python이 아닌 다른 언어를 사용하시는 경우에는 priority queue 구현까지도 같이 외우셔야 실제 상황에서 문제를 풀 수 있습니다.
풀이는 아래 영상을 참고 바랍니다.
www.youtube.com/watch?v=oDvzkPNhG18
저작권 라이선스: CC BY (출처만 표시하면 자유롭게 이용 가능)
728x90
반응형
'백준(BOJ) 문제 풀이' 카테고리의 다른 글
백준 1976번 문제(여행 가자) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.03 |
---|---|
백준 1546번 문제(평균) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.03 |
백준 1463번 문제(1로 만들기) 파이썬(Python) 풀이 [로밍맨] (4) | 2021.07.02 |
백준 1330번 문제(두 수 비교하기) 파이썬(Python) 풀이 [로밍맨] (0) | 2021.07.02 |
백준 1298번 문제(노트북의 주인을 찾아서) 파이썬(Python) 풀이 [로밍맨] (3) | 2021.07.02 |