https://programmers.co.kr/learn/courses/30/lessons/42861
1. ๋ฌธ์ ์ค๋ช
- ์
๋ ฅ
costs: n๊ฐ์ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ๋ ๋น์ฉ - ์ถ๋ ฅ
์ต์ ๋น์ฉ์ผ๋ก ๋ชจ๋ ์ฌ์ด ์๋ก ํตํ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค ๋ ํ์ํ ์ต์ ๋น์ฉ์ return - ๊ท์น
- ๋ค๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ฑด๋๋๋ผ๋, ๋๋ฌํ ์๋ง ์์ผ๋ฉด ํตํ ๊ฐ๋ฅํ๋ค๊ณ ๋ด ๋๋ค. ์๋ฅผ ๋ค์ด A ์ฌ๊ณผ B ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์๊ณ , B ์ฌ๊ณผ C ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์์ผ๋ฉด A ์ฌ๊ณผ C ์ฌ์ ์๋ก ํตํ ๊ฐ๋ฅ
- ์ฌ์ ๊ฐ์ n์ 1 ์ด์ 100 ์ดํ
- ์์์ i์ ๋ํด, costs[i][0] ์ costs[i] [1]์๋ ๋ค๋ฆฌ๊ฐ ์ฐ๊ฒฐ๋๋ ๋ ์ฌ์ ๋ฒํธ๊ฐ ๋ค์ด์๊ณ , costs[i] [2]์๋ ์ด ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ ๋ ๋๋ ๋น์ฉ
- ๊ฐ์ ์ฐ๊ฒฐ์ ๋ ๋ฒ ์ฃผ์ด์ง์ง ์์ต๋๋ค. ๋ํ ์์๊ฐ ๋ฐ๋๋๋ผ๋ ๊ฐ์ ์ฐ๊ฒฐ๋ก ๋ด ๋๋ค. ์ฆ 0๊ณผ 1 ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, 1๊ณผ 0์ ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋ชจ๋ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ ๊ฑด์ค ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ ์ฌ ์ฌ์ด์ ๊ฑด์ค์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ด ๋๋ค.
2. ์ ์ถ๋ ฅ ์์
-
3. ์ฝ๋
def find(root, x):
if root[x] == x:
return x
root[x] = find(root, root[x])
return root[x]
def union(root,x,y):
rx, ry = find(root,x), find(root,y)
if rx != ry:
root[ry] = rx
def solution(n, costs):
answer = 0
cnt = 0
root = [i for i in range(n)]
costs = sorted(costs, key=lambda x:x[2])
for cost in costs:
if find(root, cost[0]) != find(root,cost[1]):
union(root, cost[0],cost[1])
answer+=cost[2]
cnt += 1
if cnt == n-1:
return answer
return answer
4. ์ด๋ ต๊ฑฐ๋ ํท๊ฐ๋ ธ๋ ์
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํ์ด๊ฐ๋ ๋ฐฉ๋ฒ
- ๋ ธ๋๋ฅผ ๋์๊ฐ๋ฉด์ ์์ cost๋ฅผ ์ ํํด์ผ๊ฒ ๋ค๊ณ ์๊ฐ์ ํ๋๋ฐ, ๋ชจ๋ ์ฌ์ด ํตํ๊ฐ๋ฅํ ํ ๊ฒ์ ์ด๋ป๊ฒ ๊ฒ์ฌ๋ฅผ ํ ์ง ์ด๋ ค์ ๋ค.โ Union & Find ์๋ฃ๊ตฌ์กฐ ํ์ฉ
- โ MST(์ต์ ์ ์ฅ ํธ๋ฆฌ) ์ค ํ๋์ธ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ํธ๋ ๋ฌธ์
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (Python) (0) | 2021.12.26 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์บ์ - Python (0) | 2021.06.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ฐ - Python (0) | 2021.06.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฉ์ฉกํ ์ฌ๊ฐํ - Python (1) | 2021.06.02 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํํ - Python (0) | 2021.05.18 |