728x90
https://school.programmers.co.kr/learn/courses/30/lessons/72413
🤔 문제분석
주어진 문제를 풀기위해서는 플로이드 워셜
을 알고 있어야한다.
- 임의의 노드로부터 각 임의의 노드까지 모든 최단경로를 구한다.
- s로 부터 임의의 노드를 들려서(a와 b가 같이 택시를 탐) 각 a, b 노드까지 가는 거리중 최소값을 고르면 된다.
물론, n이 300이기 때문에 플로이드 워셜
로 접근해도 되지만 만약 n이 더 커질경우 $n^3$ 시간복잡도가 크게 증가 할 수 있다. n이 충분히 커진다면 데이크스트라
를 고려하는것도 하나의 방법이 될 수 있겠다.
💻 코드
import sys
def solution(n, s, a, b, fares):
distance = [[sys.maxsize] * (n+1) for _ in range(n+1)]
for i in range(1, n+1):
distance[i][i] = 0
for c, d, f in fares:
distance[c][d] = f
distance[d][c] = f
for k in range(1, n+1):
for i in range(1, n+1):
for j in range(1, n+1):
distance[i][j] = min(distance[i][k]+distance[k][j], distance[i][j])
answer = distance[s][a] + distance[s][b]
for i in range(1, n+1):
answer = min(answer, distance[s][i] + distance[i][a] + distance[i][b])
return answer
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 추석 트래픽 (0) | 2024.05.18 |
---|---|
[프로그래머스] 광고 삽입 (0) | 2024.05.18 |
[프로그래머스] 튜플 (0) | 2024.05.15 |
[프로그래머스] 호텔 방 배정 (0) | 2024.05.15 |
[프로그래머스] 크레인 인형뽑기 (0) | 2024.05.15 |