๋ฌธ์ ์ ๋ํ ์์ธํ ์ค๋ช ์ ์๋ ๋งํฌ ์ฐธ์กฐ
programmers.co.kr/learn/courses/30/lessons/72413
Dijkstra ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ ํ์๋ค. (์ต๋จ๊ฑฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํด์ผํจ)
์ด๊ฒ ๋๋ฌธ์ ์ด Dijkstra ์๊ณ ๋ฆฌ์ฆ ์ค๋ช ๊ธ -> 990427.tistory.com/50
ํ์๋ฅผ ์ธ์ ๋ด๋ฆด์ง ๋ชจ๋ฅด๋๊น 1๋ถํฐ n๊น์ง๋ฅผ ์์์ ์ผ๋ก ๋๊ณ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๋ฐ์ ธ๋ด์ผํ๋ค.
(1->s)+(1->a)+(1->b) ์ด ์ธ ๊ฒฝ๋ก์ ํฉ์ด s์์ 1๊น์ง ํฉ์นํ๊ณ , 1๋ถํฐ A,B๊น์ง ๋ฐ๋ก๊ฐ๋ ๊ฒฝ์ฐ์ด๋ค.
์ฒ์๋ถํฐ ๋ฐ๋ก๊ฐ๋ ๊ฒฝ์ฐ, s์์ n๊น์ง ํฉ์น ํ ๋ฐ๋ก๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ๋ค์ต์คํธ๋ผ ํด์ผํ๋ค.
Code
from collections import defaultdict
import heapq
def dijkstra(n,l,r):
cost=[float('inf') for x in range(n+1)]
h=[(0,l)]
cost[l]=0
while h:
cnt,num=heapq.heappop(h)
if cost[num]<cnt:
continue
for i,j in dic[num]:
if cnt+j<cost[i]:
cost[i]=cnt+j
heapq.heappush(h,(cnt+j,i))
return cost[r]
def solution(n, s, a, b, fares):
global dic
dic=defaultdict(list)
for x,y,z in fares:
dic[x].append([y,z])
dic[y].append([x,z])
#s->a, s->b ๋ฐ๋ก๊ฐ๋ ๊ฒฝ์ฐ
res=dijkstra(n,s,a)+dijkstra(n,s,b)
for i in range(1,n+1):
if i==s:
continue
# s->i ๊น์ง ํฉ์น ํ i์์ ๋ถํฐ ๋ฐ๋ก๊ฐ๋ ๊ฒฝ์ฐ
res=min(res,dijkstra(n,s,i)+dijkstra(n,i,a)+dijkstra(n,i,b))
return res
'๐ Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ๋ก๊ทธ๋๋จธ์ค ์งํ ์ด๋ (0) | 2021.03.11 |
---|---|
[Python] ๋ฐฑ์ค 7453 (2) | 2021.03.09 |
[Python] ๋ฐฑ์ค 1208 (0) | 2021.03.08 |
[Python] ๋ฐฑ์ค 1167, 1967 (0) | 2021.03.08 |
[Python] ๋ฐฑ์ค 10917 (0) | 2021.03.07 |