๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค - ์ฌ ์ฐ๊ฒฐํ๊ธฐ
ํ์ด ๊ณผ์
๋ชจ๋ ์ ์ ์ ์ฐ๊ฒฐํ๋ ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST)๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํ๋ฆผ๊ณผ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ ์ ์๋๋ฐ ์ด๋ฒ์๋ ํฌ๋ฃจ์ค์นผ์ ์ฌ์ฉํ๋ค.
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ์ ๋ณด๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค ๋ค์, ์ฌ์ดํด์ ํ์ฑํ์ง ์๋ ๊ฐ์ ๋ค์ ํ์์ ์ผ๋ก ์ ํํด์ค๋ค.
์ด๋ฅผ ์ํ union-find ์๋ฃ๊ตฌ์กฐ๋ง ์ ๊ฒฝ์จ์ ๊ตฌํํ๋ฉด ๋ฌด๋ํ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ฝ๋
def union(p, u, v):
u, v = find(p, u), find(p, v)
if u == v:
return
p[u] = v
def find(p, u):
if p[u] == u:
return u
p[u] = find(p, p[u])
return p[u]
def kruskal(v, edges):
answer = 0
parent = [i for i in range(v)]
edges.sort(key=lambda x: x[2])
for edge in edges:
# ์ด๋ฏธ ๊ฐ์ ์ปดํฌ๋ํธ๋ผ๋ฉด pass
u, v = find(parent, edge[0]), find(parent, edge[1])
if u == v:
continue
union(parent, u, v)
answer += edge[2]
return answer
def solution(n, costs):
answer = kruskal(n, costs)
return answer
n = 5
costs = [
[0, 1, 1],
[1, 2, 2],
[3, 4, 3],
[2, 3, 7],
]
print(solution(n, costs))
๋ฐ์ํ
'๐ algorithm > programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ์ต๊ณ ์ ์งํฉ (0) | 2021.03.01 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค Level 2 - ํฐ ์ ๋ง๋ค๊ธฐ (0) | 2021.03.01 |
ํ๋ก๊ทธ๋๋จธ์ค Level 4 - ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2021.03.01 |
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ์ ๊ตญ ์ฌ์ฌ (0) | 2021.03.01 |
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ์ถ์ ํธ๋ํฝ (0) | 2021.03.01 |
๐ฌ ๋๊ธ