๐กsolutions )
๐ฌ ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค.
๐ฌ ๋ค์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํฌํจํ์ฌ ์ต์ ๋น์ฉ์ ๊ตฌํด์ผ ํ๋ ๋ฌธ์ ๋ค.
(1) ๋ฌด์ง์ ์ดํผ์น๊ฐ ๋ฐ๋ก ํ์๋ฅผ ํ๊ณ ๊ฐ๋ฅ ๊ฒฝ์ฐ
(2) ํน์ ์ง์ ๊น์ง ํจ๊ป ์ด๋ ํ ๊ฐ์ ๋ชฉ์ ์ง๊น์ง ๊ฐ๋ ๊ฒฝ์ฐ -> ์ด๋ ๋ ์ค ํ์ฌ๋์ด ๋๋จธ์ง ํ์ฌ๋์ ๋ฐ๋ ค๋ค ์ฃผ๊ณ ๋ณธ์ธ ์ง์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ ํฌํจ๋๋ค.
๐ฌ ์นด์นด์ค ํ ํฌ ๋ธ๋ก๊ทธ์ ๋ฐ๋ฅด๋ฉด, ๋ค์ต์คํธ๋ผ์ ํ๋ก์ด๋์์ฌ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค. ์ถํ ํ๋ก์ด๋์์ฌ๋ก๋ ํ์ด๋ด์ผ๊ฒ ๋ค.
๐จ๐ปcode )
import heapq
def dijkstra(adj, num, s, e):
heap = []
heapq.heappush(heap, [0, s])
INF = float('inf')
dist = [INF] * (num + 1)
dist[s] = 0
while heap:
cost, node = heapq.heappop(heap)
if dist[node] < cost:
continue
for n, c in adj[node]:
c += cost
if c < dist[n]:
dist[n] = c
heapq.heappush(heap, [c, n])
return dist[e]
def solution(num, s, a, b, fares):
adj = [[] for _ in range(num + 1)] # ์ธ์ ํ๋ ฌ
for x, y, c in fares:
adj[x].append([y, c])
adj[y].append([x, c])
res = dijkstra(adj, num, s, a) + dijkstra(adj, num, s, b) # (1)์์์ ์์ a, b๊น์ง ๊ฐ์ ๋ฐ๋ก ๊ฐ๋ ๊ฒฝ์ฐ
for i in range(1, num + 1):
if s != i:
# (2)ํน์ ์ง์ ๊น์ง ์ด๋ ํ, ๊ฐ์ ๋ชฉ์ ์ง๊น์ง ๊ฐ๋ ๊ฒฝ์ฐ
# (1)๊ณผ(2) ๋น์ฉ ์ค ์ต์๊ฐ ๊ตฌํ๊ธฐ
res = min(res, dijkstra(adj, num, s, i) + dijkstra(adj, num, i, a) + dijkstra(adj, num, i, b))
return res
๐description )
[๋ฌธ์ ์ค๋ช ][๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
๋ฐค๋ฆ๊ฒ ๊ท๊ฐํ ๋ ์์ ์ ์ํด ํญ์ ํ์๋ฅผ ์ด์ฉํ๋ ๋ฌด์ง๋ ์ต๊ทผ ์ผ๊ทผ์ด ์ฆ์์ ธ ํ์๋ฅผ ๋ ๋ง์ด ์ด์ฉํ๊ฒ ๋์ด ํ์๋น๋ฅผ ์๋ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๊ณ ์์ต๋๋ค. ๋ฌด์ง๋ ์์ ์ด ํ์๋ฅผ ์ด์ฉํ ๋ ๋๋ฃ์ธ ์ดํผ์น ์ญ์ ์์ ๊ณผ ๋น์ทํ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ํ์๋ฅผ ์ข ์ข ์ด์ฉํ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๋ฌด์ง๋ ์ดํผ์น์ ๊ท๊ฐ ๋ฐฉํฅ์ด ๋น์ทํ์ฌ ํ์ ํฉ์น์ ์ ์ ํ ์ด์ฉํ๋ฉด ํ์์๊ธ์ ์ผ๋ง๋ ์๋ ์ ์์ ์ง ๊ณ์ฐํด ๋ณด๊ณ ์ดํผ์น์๊ฒ ํฉ์น์ ์ ์ํด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ ์์ ๊ทธ๋ฆผ์ ํ์๊ฐ ์ด๋ ๊ฐ๋ฅํ ๋ฐ๊ฒฝ์ ์๋ 6๊ฐ ์ง์ ์ฌ์ด์ ์ด๋ ๊ฐ๋ฅํ ํ์๋ ธ์ ๊ณผ ์์์๊ธ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆผ์์ A์ B ๋ ์ฌ๋์ ์ถ๋ฐ์ง์ ์ธ 4๋ฒ ์ง์ ์์ ์ถ๋ฐํด์ ํ์๋ฅผ ํ๊ณ ๊ท๊ฐํ๋ ค๊ณ ํฉ๋๋ค. A์ ์ง์ 6๋ฒ ์ง์ ์ ์์ผ๋ฉฐ B์ ์ง์ 2๋ฒ ์ง์ ์ ์๊ณ ๋ ์ฌ๋์ด ๋ชจ๋ ๊ท๊ฐํ๋ ๋ฐ ์์๋๋ ์์ ์ต์ ํ์์๊ธ์ด ์ผ๋ง์ธ ์ง ๊ณ์ฐํ๋ ค๊ณ ํฉ๋๋ค.
[๋ฌธ์ ]
์ง์ ์ ๊ฐ์ n, ์ถ๋ฐ์ง์ ์ ๋ํ๋ด๋ s, A์ ๋์ฐฉ์ง์ ์ ๋ํ๋ด๋ a, B์ ๋์ฐฉ์ง์ ์ ๋ํ๋ด๋ b, ์ง์ ์ฌ์ด์ ์์ ํ์์๊ธ์ ๋ํ๋ด๋ fares๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋, A, B ๋ ์ฌ๋์ด s์์ ์ถ๋ฐํด์ ๊ฐ๊ฐ์ ๋์ฐฉ ์ง์ ๊น์ง ํ์๋ฅผ ํ๊ณ ๊ฐ๋ค๊ณ ๊ฐ์ ํ ๋, ์ต์ ์์ ํ์์๊ธ์ ๊ณ์ฐํด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๋ง์ฝ, ์์ ํฉ์น์ ํ์ง ์๊ณ ๊ฐ์ ์ด๋ํ๋ ๊ฒฝ์ฐ์ ์์ ํ์์๊ธ์ด ๋ ๋ฎ๋ค๋ฉด, ํฉ์น์ ํ์ง ์์๋ ๋ฉ๋๋ค.