728x90
https://www.acmicpc.net/problem/18223
💡 문제 풀이
다익스트라 알고리즘 문제이다.
문제를 처음 읽으면 최단 경로에 건우가 있는지 따져야 할 것만 같지만 이 문제는 단순히 최소 비용만 따지면 된다.
마산까지의 최소 비용과 (시작 지점부터 건우가 있는 곳까지의 비용 + 건우가 있는 곳부터 마산까지의 비용)이 같다면
최단 경로의 길이보다 길어지지 않는 것이므로 건우를 구해서 마산으로 가도 괜찮다는 뜻이다.
구현한 다익스트라 함수로 최소 거리를 따져주면 된다.
✔️ 느낀 점
알고리즘을 잘 이해하고 문제에서 요구하는 점을 잘 따져주면 쉽게 풀 수 있는 문제이다.
💻 코드
import sys, heapq
input = sys.stdin.readline
INF = int(1e9)
V, E, P = map(int, input().split())
graph = [[] for _ in range(V+1)]
for _ in range(E):
start, end, cost = map(int, input().split())
graph[start].append([cost, end])
graph[end].append([cost, start])
def dijkstra(start):
distances = [INF] * (V+1)
distances[start] = 0
q = []
heapq.heappush(q, [0, start])
while q:
currentCost, currentNode = heapq.heappop(q)
if distances[currentNode] < currentCost: continue
for nextCost, nextNode in graph[currentNode]:
newCost = nextCost + currentCost
if newCost < distances[nextNode]:
distances[nextNode] = newCost
heapq.heappush(q, [newCost, nextNode])
return distances
print("SAVE HIM" if dijkstra(1)[V] == (dijkstra(1)[P] + dijkstra(P)[V]) else "GOOD BYE")
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[Python] 백준 2458번 : 키 순서 (0) | 2022.09.02 |
---|---|
[Python] 백준 1043번 : 거짓말 (빅뱅 거짓말 아님ㅋ) (0) | 2022.09.01 |
[Python] 백준 12904번 : A와 B (0) | 2022.08.26 |
[Python] 백준 2931번 : 가스관 (0) | 2022.08.25 |
[Python] 백준 14698번 : 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) (0) | 2022.08.24 |
댓글