[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ๋คํธ์ํฌ
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/43162
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋คํธ์ํฌ
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
์ ํ์ฌํญ
- ์ปดํจํฐ์ ๊ฐ์ n์ 1 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ๊ฐ ์ปดํจํฐ๋ 0๋ถํฐ n-1์ธ ์ ์๋ก ํํํฉ๋๋ค.
- i๋ฒ ์ปดํจํฐ์ j๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด computers[i][j]๋ฅผ 1๋ก ํํํฉ๋๋ค.
- computer[i][i]๋ ํญ์ 1์ ๋๋ค.
ํ์ด
๊ทธ๋ํ ๋ด์์ ์กด์ฌํ๋ ํธ๋ฆฌ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์์ต๋๋ค. DFS๋ก ๋๊น์ง ํ์ํด์ ๋ชจ๋ ์ ์ ์ ์ฒดํฌํ ๋๊น์ง ๋ช ๋ฒ์ ๋ฃจํธ๋ ธ๋๋ฅผ ๋ง๋ค์ด์ผํ๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์๋ ์๊ณ , ์ ๋์จ ํ์ธ๋๋ก ์ฌ์ดํด์ ๋ชจ๋ ์ฐพ์์ ๊ณ ์ ํ ๋ฃจํธ๋ ธ๋์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
์ ๋ ์ ๋์จ ํ์ธ๋๋ฅผ ์ฐ์ตํด๋ณด๊ณ ์ ์ ์ฉํด๋ณด์๊ณ ํฐ ์ด๋ ค์ ์์ด ํด๊ฒฐํ ์ ์์์ต๋๋ค.
์ฝ๋
import Foundation | |
func find(x: Int, parent: inout [Int]) -> Int { | |
if(parent[x] == x) { return x } | |
else { return find(x: parent[x], parent: &parent) } | |
} | |
func union(a: Int, b: Int, parent: inout [Int], level: inout [Int]) { | |
let a = find(x: a, parent: &parent) | |
let b = find(x: b, parent: &parent) | |
if a == b { return } | |
if level[a] >= level[b] { | |
parent[b] = a | |
} else { | |
parent[a] = b | |
} | |
if level[a] == level[b] { | |
level[b] += 1 | |
} | |
} | |
func solution(_ n:Int, _ computers:[[Int]]) -> Int { | |
var parent: [Int] = [] | |
var level: [Int] = [] | |
for i in 0..<n { | |
parent.append(i) | |
level.append(0) | |
} | |
for (cIndex, computer) in computers.enumerated() { | |
for (nIndex, network) in computer.enumerated() { | |
if network == 1 { | |
union(a: cIndex, b: nIndex, parent: &parent, level: &level) | |
} | |
} | |
} | |
for i in 0..<n { | |
parent[i] = find(x: i, parent: &parent) | |
} | |
return Set(parent).count | |
} |
'๐๐ปโโ๏ธ ํผ-์์ค > ๐ฃ ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ๋์คํฌ ์ปจํธ๋กค๋ฌ (0) | 2021.09.23 |
---|---|
[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ์์ (0) | 2021.09.21 |
[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ๊ฐ์ฅ ๋จผ ๋ ธ๋ (0) | 2021.09.21 |
[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ์ถ์ํธ๋ํฝ (0) | 2021.09.18 |
[์ค์ํํธ ์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค: ์์ถ (0) | 2021.09.12 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.