[프로그래머스] 합승 택시 요금 - PYTHON
2022. 11. 18. 20:31ㆍ백준 & 프로그래머스
문제 주소 : https://school.programmers.co.kr/learn/courses/30/lessons/72413
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
특정 노드부터 S, A, B까지 최소 금액을 s, a, b라고 했을 때 s+a+b의 최솟값을 구하는 것이 이 문제의 목표다.
따라서 S, A, B과 다른 노드들의 최소 금액을 모두 구했다. 사용한 알고리즘은 dijkstra인데, dijkstra 알고리즘에 대한 자세한 풀이는 다른 블로그를 참조바란다!
import math
def dijkstra(now, n, fares):
check = [0 for _ in range(n+1)]
dist = [math.inf for _ in range(n+1)]
dist[now] = 0
for _ in range(n):
edges = [edge for edge in fares if edge[0] == now or edge[1] == now]
for edge in edges:
next = edge[0] if edge[0] != now else edge[1]
if check[next] == 1:
continue
fare = edge[2] + dist[now]
dist[next] = fare if dist[next] > fare else dist[next]
check[now] = 1
arr = [d if check[i] == 0 else math.inf for i, d in enumerate(dist) ]
now = arr.index(min(arr))
return dist
def solution(n, s, a, b, fares):
answer = []
s_dij = dijkstra(s, n, fares)
a_dij = dijkstra(a, n, fares)
b_dij = dijkstra(b, n, fares)
for i, node in enumerate(s_dij):
if node == math.inf:
continue
answer.append(node + a_dij[i] + b_dij[i])
return min(answer)
'백준 & 프로그래머스' 카테고리의 다른 글
[프로그래머스] 후보키 - PYTHON (0) | 2022.11.22 |
---|---|
[프로그래머스] 가장 긴 팰린드롬 - PYTHON (0) | 2022.11.21 |
[프로그래머스] 하노이의 탑 - PYTHON (0) | 2022.11.20 |
[프로그래머스] 경주로 건설 - PYTHON (0) | 2022.11.20 |
[프로그래머스] 거리두기 확인하기 - PYTHON (0) | 2022.11.19 |