네트워크
내가 푼 pseudocode
// 깊이 탐색
//먼저 다 탐색을 하지 않았다는 전제.
//탐색을 하지 않은 것 부터 하나씩
// 0 번을 방문하지 않았다는 건 네트워크 하나가 필요
// 1 번을 방문했다는 것은 네트워크가 불피요
// 2번을 방문한적이 없다는것은 네트워크가 하나 더 필요
// [1, 1, 0]
// 자신 말고 하나가 1인것 찾고, 이 노드는 이미 탐색한것이라는 걸 체크하기
// 1인 것 찾아서 그 컴퓨터로 들어가기
// [1, 1, 0]
// 1인 것이 하나 있다면
// 이미 체크한 인덱스인지 확인하고 체크했다면 다른 노드를 찾기
결과
function solution(n, computers) {
let answer = 0;
// 깊이 탐색
//먼저 다 탐색을 하지 않았다는 전제.
//탐색을 하지 않은 것 부터 하나씩
// 0 번을 방문하지 않았다는 건 네트워크 하나가 필요
// 1 번을 방문했다는 것은 네트워크가 불피요
// 2번을 방문한적이 없다는것은 네트워크가 하나 더 필요
// [1, 1, 0]
// 자신 말고 하나가 1인것 찾고, 이 노드는 이미 탐색한것이라는 걸 체크하기
// 1인 것 찾아서 그 컴퓨터로 들어가기
// [1, 1, 0]
// 1인 것이 하나 있다면
// 이미 체크한 인덱스인지 확인하고 체크했다면 다른 노드를 찾기
let didcheck = [];
computers.forEach(el =>{
didcheck.push(false)
})
const dfs = (computerNumber)=>{
didcheck[computerNumber] = true;
computers.forEach((el, idx)=>{
if(idx!==computerNumber){
if(!didcheck[idx] &&computers[computerNumber][idx] === 1){
dfs(idx);
}
}
})
}
for(let i = 0; i < didcheck.length ;i ++){
if(!didcheck[i]){
dfs(i);
answer++;
}
}
return answer;
}
알게된점
- for문 반복문 보다 forEach가 시간효율성이 더 좋다