๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“Ÿ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿ˜  | Level 3

[Kotlin, Lv.3] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋„คํŠธ์›Œํฌ

by immgga 2024. 8. 6.

์ถœ์ฒ˜: unsplash.com

 

๋„คํŠธ์›Œํฌ

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์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์‚ฌ์ง„ 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๊ฐ€ ์ •๋‹ต์ด๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

์ž…๋ ฅ๋ฐ›๋Š” ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๊ฐ€ ๋ฐฑ์ค€ ๊ทธ๋ž˜ํ”„์™€๋Š” ๋‹ฌ๋ž๋‹ค.

๋ฐฑ์ค€์˜ ๊ฒฝ์šฐ๋Š” ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ณ  ๊ตฌ์ƒํ•ด์•ผ ํ•˜์ง€๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ํ†ต์œผ๋กœ ์ฃผ์–ด์กŒ๋‹ค.

๊ทธ๋ž˜ํ”„๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ์–ด์ƒ‰ํ–ˆ๋˜ ๊ฑด ์‚ฌ์‹ค์ด๋‹ค.

728x90