๐ฅ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/43162
๐ฅํ์ด ํต์ฌ
์ ๋ชฉ ์์๋ ํ์ ๋์๋ฏ์ด ํ์ด์ ํต์ฌ์ DFS ๋ก ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํจํฐ๋ค์ ๋ค ํ๊ณ ๋ค์ด๊ฐ ํ๋์ ๋คํธ์ํฌ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๋ ๋์ ๋ค๋ ๋ ์ปดํจํฐ๋ ์ฒดํฌํ์ฌ ํด๋น ์ปดํจํฐ๋ ๋ค์ ๋ค๋ฆฌ์ง ์๋ ๊ฒ ์ด๋ค.
๐ฅ์ฒซ๋ฒ์งธ ๋ด ํ์ด
๋ด๊ฐ ์ฒ์์ ์๊ฐํ ๋ดํ์ด๋ ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ์ง ์์๋ค. ํ์ง๋ง ์ฌ๊ทํจ์์ ๋์์ ํ(queue)์ while์ ํตํด ๊ตฌํํ์๋ค. ์๋์ ๊ฐ์ ์ฝ๋๋ก ๋ฌธ์ ๋ฅผ ํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ ๋ต ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ค์ ํ์ด ๋ณด์๋๋ฐ ๊ทธ ์ฝ๋๋ ๋๋ฒ์งธ ํ์ด์์ ํ์ธํ ์ ์๋ค.
function solution(n, computers) {
let networks = []
let visited = Array(n).fill(0)
for(let i=0; i<=n-1; ++i){
// ์๋ค๋ ธ์ผ๋ฉด ๋ค๋ฆฐ๋ค.
if(!visited[i]){
let toVisit = [i]
let group = [i]
while(toVisit.length){
let pick = toVisit.shift()
visited[pick] = 1
computers[pick].forEach((state,com_idx)=>{
if(state===1 && !group.includes(com_idx)){
toVisit.push(com_idx)
group.push(com_idx)
}
})
}
networks.push(group)
}
}
return networks.length
}
๐ฅ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ๋ค๋ฅธ ํ์ด
์ฌ๊ท๋ก ํผ ํ์ด๊ฐ ์ฝ๋๊ฐ ์กฐ๊ธ ๋ ์งง์ ๊ฒ ๊ฐ๊ธดํ๋ค. ์ฌ๊ท๋ก ํ๋ ํ์ง ์๋ ์ค์ํ๊ฒ์ ์๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ๋์ ๋คํธ์ํฌ๋ฅผ ํ์ฑํ๋ ์ปดํจํฐ๋ค์ ํ๋ฒ์ ์ฒดํฌํด์ผ ํ๊ณ ์ด๋ฅผ ์ฐธ๊ณ ํด์ ํ์ด๋ฅผ ์งํํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
function solution(n, computers) {
let answer = 0
let visited = Array(n).fill(0)
const dfs =(com_index)=>{
if(visited[com_index]){
return 0
}
visited[com_index] = 1 // ๋ค๋ ๋ค๊ณ ํ๊ธฐ
computers[com_index].forEach((isConnected,i)=>{
// ์ฐ๊ฒฐ๋์์ผ๋ฉด
if(isConnected){
dfs(i)
}
})
return 1
}
for(let i=0; i<=n-1; i++){
answer+=dfs(i)
}
return answer
}
'๐Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ๊ฒน์น๋ ์ ๋ถ์ ๊ธธ์ด (0) | 2024.07.20 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ์ฟผ๋์์ถ ํ ๊ฐ์ ์ธ๊ธฐ (0) | 2024.07.15 |
ํ๋ก๊ทธ๋๋จธ์ค [JS] > ์์์ฐพ๊ธฐ (0) | 2024.07.07 |
ํ๋ก๊ทธ๋๋จธ์ค (JS) > ๊ฐ์ฅ ํฐ์ (0) | 2024.07.04 |
ํ๋ก๊ทธ๋๋จธ์ค[JS] > ํ๋ฐฐ์์ (0) | 2024.06.29 |