๐ ๋ฌธ์ ์ค๋ช
n๊ฐ์ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ๋ ๋น์ฉ(costs)์ด ์ฃผ์ด์ง ๋, ์ต์์ ๋น์ฉ์ผ๋ก ๋ชจ๋ ์ฌ์ด ์๋ก ํตํ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค ๋ ํ์ํ ์ต์ ๋น์ฉ์ return ํ๋๋ก solution์ ์์ฑํ์ธ์.
๋ค๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ฑด๋๋๋ผ๋, ๋๋ฌํ ์๋ง ์์ผ๋ฉด ํตํ ๊ฐ๋ฅํ๋ค๊ณ ๋ด ๋๋ค. ์๋ฅผ ๋ค์ด A ์ฌ๊ณผ B ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์๊ณ , B ์ฌ๊ณผ C ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์์ผ๋ฉด A ์ฌ๊ณผ C ์ฌ์ ์๋ก ํตํ ๊ฐ๋ฅํฉ๋๋ค.
์ ํ์ฌํญ
- ์ฌ์ ๊ฐ์ n์ 1 ์ด์ 100 ์ดํ์ ๋๋ค.
- costs์ ๊ธธ์ด๋ ((n-1) * n) / 2์ดํ์ ๋๋ค.
- ์์์ i์ ๋ํด, costs[i][0] ์ costs[i] [1]์๋ ๋ค๋ฆฌ๊ฐ ์ฐ๊ฒฐ๋๋ ๋ ์ฌ์ ๋ฒํธ๊ฐ ๋ค์ด์๊ณ , costs[i] [2]์๋ ์ด ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ ๋ ๋๋ ๋น์ฉ์ ๋๋ค.
- ๊ฐ์ ์ฐ๊ฒฐ์ ๋ ๋ฒ ์ฃผ์ด์ง์ง ์์ต๋๋ค. ๋ํ ์์๊ฐ ๋ฐ๋๋๋ผ๋ ๊ฐ์ ์ฐ๊ฒฐ๋ก ๋ด ๋๋ค. ์ฆ 0๊ณผ 1 ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, 1๊ณผ 0์ ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋ชจ๋ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ ๊ฑด์ค ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ ์ฌ ์ฌ์ด์ ๊ฑด์ค์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ด ๋๋ค.
- ์ฐ๊ฒฐํ ์ ์๋ ์ฌ์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
4 | [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] | 4 |
์ ์ถ๋ ฅ ์ ์ค๋ช
costs๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ด๋ ์ด๋ก์ ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ ์ ๋น์ฉ์ผ๋ก ๋ชจ๋๋ฅผ ํตํํ ์ ์๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
![](https://blog.kakaocdn.net/dn/cpfthd/btrOyNc1jxq/pxrth4kgbjIAOyk4mfqajk/img.png)
๐ ํ์ด ์ฝ๋
# ๊ฐ์ ๋ค์ด ์ด์ ์ ์ ์ ์ฐพ๋ ํจ์
def find(x, Vroot):
if x != Vroot[x]:
Vroot[x] = find(Vroot[x], Vroot)
return Vroot[x]
def solution(n, costs):
answer = 0
# ์ฐ๊ฒฐ ์์ ์ค ๊ฐ์ฅ ์์ ๊ฐ, ์ฒ์์๋ ์๊ธฐ ์์ ์ ์ ์ฅํ๋ Vroot
Vroot = [i for i in range(n + 1)]
# ๊ฐ์ ์ ๊ฐ์ค์น ๊ธฐ์ค์ผ๋ก ์ ์ฅ ๋ฐ ์ ๋ ฌ
Elist = []
for c in costs:
# A๋ฒ ์ ์ / B๋ฒ ์ ์ / ๊ฐ์ค์น
Elist.append(list(map(int, c)))
Elist.sort(key=lambda x: x[2])
answer = 0
for s, e, w in Elist:
# find ํจ์๋ฅผ ํตํด์ ๋ ์ ์ ์ฐพ๊ธฐ
sRoot = find(s, Vroot)
eRoot = find(e, Vroot)
# ๋ root๊ฐ ๋ค๋ฅด๋ค๋ฉด ํฐ root๊ฐ์ ์์ root๊ฐ์ผ๋ก ๋ง๋ค์ด ์ฐ๊ฒฐ๋๊ฒ ํ๋ค.
if sRoot != eRoot:
if sRoot > eRoot:
Vroot[sRoot] = eRoot
else:
Vroot[eRoot] = sRoot
# ๊ฐ์ค์น๋ฅผ ๋ํ๋ค.
answer += w
return answer
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ๋ค.
๋ฌธ์ ์ ์๋๋ ์ ํํ๊ฒ MST(Minimum Spanning Tree, ์ต์ ์ ์ฅํธ๋ฆฌ)๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ์ต์ ์ ์ฅํธ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํ์ด๊ฐ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๋ฌธ์ ์ ๋ํ ์์ธํ ์ค๋ช ์ ์ฝ๋์ ๋ํ ์ฃผ์์ด ๋ด๊ฒจ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธํํ์ด๋ค.
๋ง๋ find ํจ์๋ฅผ ํตํด s๋ถํฐ ์ด์ด์ง ํธ๋ฆฌ, e๋ถํฐ ์ด์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๊ฐ์ ์ ์ ์ ์ฐพ๋๋ค.
๋ง์ฝ s์ e๊ฐ ๋ชจ๋ ์ด์ด์ ธ์ sRoot == eRoot๋ผ๋ฉด ์ด๋ฏธ ์ฐ๊ฒฐ๋ ์ํ์ด๋ฏ๋ก ๊ฐ์ค์น ๊ฐฑ์ ์ด ํ์ ์๋ค.
ํ์ง๋ง ์๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ ๋ ธ๋ ์ฌ์ด์ ์ฐ๊ฒฐ์ด ๋์ง ์์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ์ด์ด์ค๋ค.
์ด์ด์ค๋ค๋ ๊ฒ์ Vroot์ ์ ์ฅํ๋๋ฐ, ์ฒ์์ ์ธ๋ฑ์ค ์๊ธฐ์์ ์ ๊ฐ์ ๊ฐ์ก๋ค๊ฐ ์ฐ๊ฒฐ๋๋ฉด ์ฐ๊ฒฐ๋ ์์ ์ค์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ ์ฅํ๋ค.
10๊ฐ์ ๋ ธ๋ ์ค 1, 3, 6๋ฒ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ๋์๊ณ ๋๋จธ์ง๋ ์๋๋ผ๋ฉด, Vroot๋ [0, 1, 2, 1, 4, 5, 1, 7, 8, 9, 10]์ ๊ฐ์ ๊ฐ์ง ๊ฒ์ด๋ค.
๊ทธ๋์ if๋ฌธ ๋ด๋ถ์ if๋ฌธ ์ฐ์ฐ์ ์ฐ๊ฒฐ๋ ๊ฒ ์ค ๊ฐ์ฅ ์์ ๊ฒ์ ๋ฐ๋ผ๊ฐ๊ฒ ์ค์ ํ๋ ๊ฒ์ด๋ค.
๊ฐ์ค์น๋ฅผ ๋ํ๋ฉด์ ๋ค ์ด์ด์ง ๋๊น์ง ํ๊ธฐ๋ง ํ๋ฉด ๋๋ ์ด์ ๋ ๊ฐ์ค์น ๊ธฐ๋ฐ์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์ฅํธ๋ฆฌ๊ฐ ๋ณด์ฅ๋๋ค.
'๐ ์ฝ๋ฉํ ์คํธ ๋๋น : PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์คํฐ์ปค ๋ชจ์ผ๊ธฐ(2) (level3, python) (0) | 2022.10.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฐ๋ฌ (level2, python) (0) | 2022.10.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ค ์๋ ๋ฐฉ๋ฒ (level2, python) (1) | 2022.10.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ๋จผ ๋ ธ๋ (level3, python) (0) | 2022.10.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฉ๊ธ๊ทธ๊ณก (level2, python) (1) | 2022.10.13 |