TIL 20210714

Jean Deluge·2021년 7월 14일
0

TIL

목록 보기
19/19

네트워크

내가 푼 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가 시간효율성이 더 좋다
profile
node.js , rudyonrails개발자

0개의 댓글