๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿบ ๋งค์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋„คํŠธ์›Œํฌ

๋ฌธ์ œ

  • ๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ๋“ค์–ด ์ปดํ“จํ„ฐA๊ฐ€ ์ปดํ“จํ„ฐB์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ , ์ปดํ“จํ„ฐB๊ฐ€ ์ปดํ“จํ„ฐC์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋ฉด, ์ปดํ“จํ„ฐA์™€ ์ปดํ“จํ„ฐC๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐA,B,C๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปดํ“จํ„ฐ์˜ ๊ฐฏ์ˆ˜ n๊ณผ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋„คํŠธ์›Œํฌ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

์ž…๋ ฅ๊ฐ’

  • n(int): ์ปดํ“จํ„ฐ์˜ ๊ฐฏ์ˆ˜
  • computers(int[][]): ์ปดํ“จํ„ฐ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ‘œํ˜„ํ•œ 2์ฐจ์›๋ฐฐ์—ด. ์ปดํ“จํ„ฐi์™€ ์ปดํ“จํ„ฐj๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋ฉด computers[i][j]๋Š” 1์ด๊ณ  ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด 0์ด๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • 1 <= n <= 200
  • computers[i][i]๋Š” ํ•ญ์ƒ 1 ์ด๋‹ค.

 

๋ฌธ์ œํ’€์ด

  1. ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋„คํŠธ์›Œํฌ๋Š” ์ง‘ํ•ฉ seen์— ๋„ฃ์–ด ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š”๋‹ค. ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋„คํŠธ์›Œํฌ๋ณด๋‹ค ๋จผ์ € ๋ฐฉ๋ฌธํ•œ๋‹ค. (DFS)
  2. seen ์ง‘ํ•ฉ์— ์ถ”๊ฐ€๋˜์–ด์žˆ์ง€ ์•Š๋Š” ์ปดํ“จํ„ฐ๋ฅผ ๋ฐฉ๋ฌธ์‹œ ์ƒˆ ๋„คํŠธ์›Œํฌ์— ์ง„์ž…ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ๊ฐฏ์ˆ˜๋ฅผ ์นด์šดํŠธ ์—… ํ•ด์ค€๋‹ค. 
function solution(n, computers) {
    const seen = new Set()
    const dfs = i => {
        seen.add(i)
        for (const j in computers) {
            if (!seen.has(j) && computers[i][j]) {
                dfs(j)
            }
        }
    }
    let answer = 0
    for (const i in computers) {
        if (!seen.has(i)) {
            answer++
            dfs(i)
        }
        
    }
    return answer
    
}

์‹œ๊ฐ„๋ณต์žก๋„: O(N)

๊ณต๊ฐ„๋ณต์žก๋„: O(N)