반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 그리디
- 파이썬
- 프로그래머스
- pccp
- 2018캐시
- 에라스테네스의 체
- AI논문
- DP
- 2020카카오
- 코딩테스트
- 밸만포드알고리즘
- 부수입
- 2021카카오
- 투잡
- 구글애드몹
- 코딩오류
- 바이브코딩
- 코딩테스크
- 코테
- 콜랩오류
- Python
- 2018카카오
- 브루드포스
- 논문추천
- 백준
- ai부수입
- 투포인터
- 앱제작
- 백트레킹
- 밸만포드
Archives
- Today
- Total
kiteday 님의 블로그
[프로그래머스-파이썬] 합승 택시 요금 본문
반응형
SMALL
https://school.programmers.co.kr/learn/courses/30/lessons/72413
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
크게 두 가지 경우의 수가 있다.
1. s->a, s->b로 바로 가는 방법
2. s->k(중간지점)->a, s->k->b 중간까지 같이 타고 가다가 각자 타고 가는 방법
- 양방향 그래프이므로 k-> a를 구하는 것은 a->k를 구하는 것과 같다.
따라서 먼저 s, a, b을 각 출발점으로 두고 각 노드를 방문하는 코드를 짜서 이를 비교하면 된다.
import heapq
def solution(n, s, a, b, fares):
answer = float('inf')
graph = [[] for _ in range(n+1)]
for f in fares:
graph[f[0]].append([f[1], f[2]])
graph[f[1]].append([f[0], f[2]])
def search(cost, start):
# nonlocal graph
cost[start] = 0
q = []
heapq.heappush(q, (start, 0))
while q:
cur, cur_cost = heapq.heappop(q)
if cost[cur] < cur_cost:
continue
for node, dis in (graph[cur]):
if cur_cost + dis < cost[node]:
cost[node] = cur_cost + dis
heapq.heappush(q, (node, cur_cost+dis))
return cost
INF = float("inf")
cost_s = [INF]*(n+1)
cost_a = [INF]*(n+1)
cost_b = [INF]*(n+1)
cost_s = search(cost_s, s)
cost_a = search(cost_a, a)
cost_b = search(cost_b, b)
for k in range(1, n+1):
answer = min(cost_s[k]+cost_a[k]+cost_b[k], answer)
if answer > cost_s[a]+cost_s[b]:
answer = cost_s[a]+cost_s[b]
return answerLIST
'코딩테스트' 카테고리의 다른 글
| [프로그래머스-파이썬] 순위검색 (1) | 2025.12.01 |
|---|---|
| [프로그래머스-파이썬] 자물쇠와 열쇠 (0) | 2025.12.01 |
| [프로그래머스-파이썬] 혼자서 하는 틱택토 (1) | 2025.11.30 |
| [프로그래머스-파이썬] 표현 가능한 이진트리 (0) | 2025.11.26 |
| [백준-파이썬] 2293-동전1 (0) | 2025.11.01 |