๋คํธ์ํฌ
Level 3
https://school.programmers.co.kr/learn/courses/30/lessons/43162
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
๊ฐ ์ปดํจํฐ ๊ฐ ๋คํธ์ํฌ๊ฐ ํ์ฑ๋์ด ์์ผ๋ฉด 1์ด๊ณ ์๋๋ฉด 0์ผ๋ก ์ ๋ ฅ๋๋ค.
n์ ๊ฐ๋งํผ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ n * n์ 2์ฐจ์ ๋ฐฐ์ด์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ index๊ฐ ๊ฐ ์ปดํจํฐ์ ๋ํ ๋ค๋ฅธ ์ปดํจํฐ์์ ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ณผ ์ ์๋ค.
์ ๋ ฅ ์์ 1์์ [[1, 1, 0], [1, 1, 1], [0, 1, 1]]๊ฐ ์ ๋ ฅ๊ฐ์ธ๋ฐ, ์ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๊ฐ์ธ [1, 1, 0]์ 0๋ฒ์งธ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ๋ค์ ๋ปํ๋ค.
0๋ฒ์งธ index์ ๊ฐ์ธ 1์ 0๋ฒ ์ปดํจํฐ ์๊ธฐ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด 1์ด ๋ค์ด์จ๋ค. ๋ค์ ๊ฐ์ธ index 1์ ๊ฐ์ด 1์ธ๋ฐ ์ด ๋ป์ 1๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ค๋ ๋ป์ด๋ค.
๋๋จธ์ง ๋ฐฐ์ด๋ค๋ ๊ฐ๊ฐ์ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ๋ค์ ํ์ธํ ์ ์๋ค.
์ ๋ ฅ ์์ 1์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
3๋ฒ์ ์๊ธฐ ์์ ์ ์ ์ธํ๊ณ ๋๊ตฌ์๋ ์ฐ๊ฒฐ๋์ด ์์ง ์์์ ๋ฐ๋ก ๋ ๋ฆฝ๋ ๋คํธ์ํฌ๋ฅผ ๊ฐ์ง๊ณ , 1๋ฒ๊ณผ 2๋ฒ์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ์ปดํจํฐ๋ผ๋ฆฌ ํ๋์ ๋คํธ์ํฌ๋ฅผ ํ์ฑํด์ ์ ๋ต์ 2๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
private var visited = booleanArrayOf()
private var graph = arrayOf<IntArray>()
private var answer = 0
fun solution(n: Int, computers: Array<IntArray>): Int {
graph = computers
visited = BooleanArray(n)
for (i in graph.indices) {
if (!visited[i]) {
answer++
dfs(i)
}
}
return answer
}
private fun dfs(num: Int) {
visited[num] = true
val data = graph[num]
for (n in data.indices) {
if (!visited[n] && data[n] == 1) {
visited[n] = true
dfs(n)
}
}
}
๋ฌธ์ ํ์ด
computers๋ฅผ ํจ์ ์์์ ์ฐ๊ธฐ ์ํด graph๋ฅผ ์์ฑํ๊ณ , ์ปดํจํฐ๋ฅผ ์ง๋์์์ ํ์ธํ๋ ๋ณ์ visited๋ฅผ ์์ฑํ๋ค.
visited๊ฐ ์ฌ๋ฌ ๋ฒ ์ปดํจํฐ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง์์ค ๊ฒ์ด๋ค.
answer๋ ๋คํธ์ํฌ์ ๊ฐ์์ด๋ค.
์ปดํจํฐ์ ๋์๋งํผ ๋ฐ๋ณตํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ visited[i]๊ฐ false์ฌ์ผ ํ ๋ฒ๋ ๋ฐฉ๋ฌธํ์ง ์์ ์ปดํจํฐ์ด๊ธฐ ๋๋ฌธ์ dfs ํจ์๋ฅผ ์คํํ ์ ์๋ค.
dfs ํจ์์์๋ ๋ค์ด์จ ๊ฐ์ ๋ฐฉ๋ฌธํ๊ณ ๋ด๋ถ ๋ฆฌ์คํธ์์ 1์ด๋ฉด์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ฐ์ด ์์ผ๋ฉด ์ฌ๊ท๋ก ๋ค์ ๋ค์ด๊ฐ๋ ๊ตฌ์กฐ์ด๋ค. dfs๊ฐ ๋๋๊ณ ๋์ ์ฐ๊ฒฐ๋์ง ์์ ์ปดํจํฐ๋ visited๊ฐ false ์ํ์ผ ํ ๋ฐ, ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ชจ๋ ์ก์๋ด๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๋คํธ์ํฌ๊ฐ ์๋ค๊ณ ํ๋จํ ์ ์๋ค.
์์ 1์ ๊ฒฝ์ฐ์๋ ์ปดํจํฐ 1, 2๋ ์ฐ๊ฒฐ๋์ด ์๊ณ 3์ ์ฐ๊ฒฐ๋์ด ์์ง ์์๋ฐ, dfs๋ฅผ ํธ์ถํ๋ฉด์ 1, 2๋ฅผ ์ํํ๊ณ dfs๊ฐ ๋๋๋๋ฐ, ์ด๋ฅผ solution์ ๋ฐ๋ณต๋ฌธ์์ visited๊ฐ false์ธ 3์ ํ๊น์ผ๋ก ๋ค์ dfs๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค. ์ด๋ฌ๋ฉด dfs๊ฐ ์๋ก ํธ์ถ๋ ๋๋ง๋ค ์๋ก์ด ๋คํธ์ํฌ๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ answer๋ฅผ ๋๋ ค ์ค๋ค.
solution์ ๋ฐ๋ณต์ด ๋๋๊ณ ์ต์ข answer๊ฐ ์ ๋ต์ด๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
์ ๋ ฅ๋ฐ๋ ๊ทธ๋ํ ๊ตฌ์กฐ๊ฐ ๋ฐฑ์ค ๊ทธ๋ํ์๋ ๋ฌ๋๋ค.
๋ฐฑ์ค์ ๊ฒฝ์ฐ๋ ๋ด๊ฐ ์๊ฐํ๊ณ ๊ตฌ์ํด์ผ ํ์ง๋ง, ํ๋ก๊ทธ๋๋จธ์ค๋ ๊ทธ๋ํ๊ฐ ํต์ผ๋ก ์ฃผ์ด์ก๋ค.
๊ทธ๋ํ๋ฅผ ํ์ ํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ ์์์ง๋ง, ์ด์ํ๋ ๊ฑด ์ฌ์ค์ด๋ค.
'๐ | ํ๋ก๊ทธ๋๋จธ์ค > ๐ | Level 3' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, Lv.3] ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ตญ์ฌ์ฌ (0) | 2024.08.07 |
---|---|
[Kotlin, Lv.3] ํ๋ก๊ทธ๋๋จธ์ค ๋ฒ ์คํธ์จ๋ฒ (0) | 2024.07.31 |