๐Ÿ’ป[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋„คํŠธ์›Œํฌ

Chobbyยท2022๋…„ 3์›” 12์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
11/349

๋ฌธ์ œ ์„ค๋ช…

๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ 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์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1
์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2
์•„๋ž˜์™€ ๊ฐ™์ด 1๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

function solution(n, computers) {
    // ๊ฐ„์„ ์„ ์ €์žฅํ•  Object
    const networks = {}
    
    // ์ „์ฒด ๋ฐ˜๋ณต
    computers.forEach((computer,computerIdx) => {
        computer.forEach((line,lineIdx) => {
            // ๊ฐ„์„ ์ด ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋ฉด
            if(line) {
                // ๊ฐ„์„ ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋‹ค๋ฉด
                if(networks[computerIdx] === undefined) {
                    networks[computerIdx] = []    
                }
                // ์ค‘๋ณต ๊ฐ„์„  ์ œ๊ฑฐ
                if(computerIdx !== lineIdx) {
                    networks[computerIdx] = [...networks[computerIdx] , lineIdx]   
                }
            }
        })
    })
    
    // dfs ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ฐ„์„  ํƒ์ƒ‰
    function dfs(obj,root) {
        let count = 0
        const queue = Object.keys(obj)
        const visit = []
        visit[queue[queue.length-1]] = true
        while(queue.length) {
            const cur = queue.pop()
            visit[cur] = true
            obj[cur].forEach(now => {
                if(!visit[now]) {
                    queue.push(now)
                    visit[now] = true
                    count++
                }
            })
        }
        
        // ์ „์ฒด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ - ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ = ๋ถ„๋ฆฌ๋œ ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜
        return Object.keys(obj).length - count
    }
    
    return dfs(networks,Object.entries(networks)[0][0])   
}

ํ™•์ธํ•  ์ค‘์š” ํฌ์ธํŠธ๋Š”

1. ๊ฐ„์„ ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€?

์˜ˆ์ œ 1๋ฒˆ์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์œผ๋ฉฐ 0๋ฒˆ์งธ ๋…ธ๋“œ์™€ 1๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ทธ๋ฆผ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

2. DFS์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

3. ์ „์ฒด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ - ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ = ๋ถ„๋ฆฌ๋œ ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜

์ด์ •๋„ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€