๐ก ์กฐ๊ฑด ๋ฐ ํ์ด
- ๋
ธ๋์ ๊ฐ์
n
, ์ถ๋ฐ๋
ธ๋ s
, A์ ๋์ฐฉ์ง์ a
,
B์ ๋์ฐฉ์ง์ b
, ๋
ธ๋ ๊ฐ ์ด๋ํ๋๋ฐ ๋๋ ๋น์ฉ fares
- A์ B๊ฐ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ง๋ฅผ ํฅํ๊ณ ์๋ค.
- A์ B๊ฐ ๋ฐ๋ก ์ด๋ํ๋ ๊ฒ๊ณผ ์ด๋ ์ง์ ๊น์ง ๊ฐ์ด ์ด๋ํ๋ ๊ฒ ์ค์
์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฌธ์
- ๋ฏธ๋ก์ ๋ฒฝ์ ๋ถ์ด์์ผ๋ฉด ํ์ถ์ด ๊ฐ๋ฅํ๋ค.
๐ฅ ์์ค ์ฝ๋
from collections import deque
def solution(n, s, a, b, fares):
answer = int(1e9)
INF = int(1e9)
distance = [[INF] * (n + 1) for _ in range(n + 1)]
for q, w, e in fares:
distance[q][w] = e
distance[w][q] = e
for k in range(1, n + 1):
for i in range(1, n + 1):
for j in range(1, n + 1):
if i == j:
distance[i][j] = 0
else:
if distance[i][j] > distance[i][k] + distance[k][j]:
distance[i][j] = distance[i][k] + distance[k][j]
for i in range(1, n + 1):
if answer > distance[s][i] + distance[i][b] + distance[i][a]:
answer = distance[s][i] + distance[i][b] + distance[i][a]
return answer
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
print(solution(6, 4, 6, 2, [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]]))
print(solution(7, 3, 4, 1, [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]]))
print(solution(6, 4, 5, 6, [[2, 6, 6], [6, 3, 7], [4, 6, 7], [6, 5, 11], [2, 5, 12], [5, 3, 20], [2, 4, 8], [4, 3, 9]]))
์คํ๊ฒฐ๊ณผ
82
14
18
โจ๏ธ ๋ฌธ์ ํ์ด
- ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ๋ด์ graph 2์ค ๋ฆฌ์คํธ๋ฅผ ์์ฑ
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ
์ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ ๋
ธ๋๋ผ๋ฆฌ ์ผ๋ง์ ๋น์ฉ์ด ๋๋์ง ๊ณ์ฐ
i์์ j๋ก ๊ฐ๋ ๋น์ฉ
๊ณผ i์์ k๋ฅผ ๊ฒฝ์ ํ์ฌ j๋ก ๊ฐ๋ ๋น์ฉ
์ค์ ๋ ์ ๋ ดํ ๊ฒ
answer
๋ฅผ ๋ ์ ๋ ดํ ๋น์ฉ์ ๋น๊ตํ๊ธฐ ์ํด 1e9๋ก ์ด๊ธฐํ
- for ๋ฌธ์ผ๋ก 1๋ฒ ๋
ธ๋๋ถํฐ n๋ฒ ๋
ธ๋๊น์ง ์๋์ ๋ด์ฉ์ ๊ฒ์ฌํ๋ค.
answer
์ ์ถ๋ฐ์ง(s)์์ i๊น์ง ํฉ์นํ ๊ฐ
+ i ๋ถํฐ B์ ๋ชฉ์ ์ง๊น์ง ๊ฐ๋ ๊ฐ
+ i ๋ถํฐ A์ ๋ชฉ์ ์ง๊น์ง ๊ฐ๋ ๊ฐ
๋น๊ต
๐พ ๋๋์
BFS
๋ก ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์๋ณด๊ธฐ ์ํด ์ด๋๊ฑฐ๋ฆฌ ๊ฐ์ ์ ์ฅํ๋ ํ๋ฅผ ์์ฑํด ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ์๋ํ๋ค.
๊ทธ ๊ฒฐ๊ณผ ์๊ฐ์ ๋งค์ฐ ๋ญ๋นํ๊ฒ ๋์๊ณ , ํ๋ก์ด๋ ์์ฌ
์ ๋ ์ฌ๋ ค ๋ฌธ์ ํ์ด๋ฅผ ํ๋ค.
ํ๋ก์ด๋ ์์ฌ ๊ตฌํ ๋ฐฉ๋ฒ์ ์กฐ๊ธ ํท๊ฐ๋ฆฌ๋ ๋ฌธ์ ์
์ด ์์๋ค.
ํ๋ก์ด๋ ์์ฌ
์ด๋ฉด ๊ตณ์ด BFS
๊ฐ ์๋๋ฐ ์์์ ๋งํ BFS
์์ค์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋์์๋ค.
์๊ฐ์ด๊ณผ
๊ฐ ๋ฌ๋ค. 26๋ฒ ํ
์คํธ ์ผ์ด์ค์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
ํ๋ก์ด๋ ์์ฌ ๋ถ๋ถ๊ณผ ๋ฐํํ answer๋ฅผ ์ํด ๋น๊ตํ๋ ๋ถ๋ถ์์ min() ๋์
if๋ฅผ ์จ์ฃผ์๋๋ ์๋์ฐจ์ด๊ฐ ๋ ๋ฐฐ ๊ฐ๊น์ด ๋ฌ๋ค.