알고리즘/백준

[boj 11724] 연결 요소의 개수 -js

jinux127 2022. 3. 13. 01:53
// 연결 요소의 개수

const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
const input = require('fs').readFileSync(filePath).toString().trim().split('\n');

const [N, M] = input[0].split(' ').map(Number);
const arr = input.slice(1);

const sol = (N,M,arr) =>{
    const graph = Array.from(Array(N+1), () =>new Array());
    const visited = new Array(N+1).fill(false);
    let count = 0;

    for(const item of arr){
        const [node1, node2] = item.split(' ').map(Number);
        graph[node1].push(node2);
        graph[node2].push(node1);
    }

    const dfs = (v) =>{
        visited[v] = true;
        for(const node of graph[v]){
            !visited[node] ? dfs(node) : null;
        }
    }

    for(let i=1; i<=N; i++){
        if(!visited[i]){
            dfs(i);
            count++;
        }
    }
    console.log(count);
}

sol(N,M,arr);

dfs를 활용한 기본문제 인 것 같다.

순조롭게 풀던 도중 예상하지 못한 결과가 나왔는데 바로 시간초과였다..

풀이는 전혀 문제가 없어보여 바로 검색을 해보았다. 

알고리즘을 풀 때 주의사항 을 발견하였고 shift() 를 사용할 때 시간초과가 날 수 있다는 것이였다.

 

shift 연산은 주의해서 사용하자!! 하나 또 배워 기분좋게 잘 수 있겠다!

 

+ 자연스럽게 그럼 큐를 사용할 때 js에선 shift를 사용해 구현했는데 큐를 어떻게 구현하지? 라는 궁금증이 생겼다. js로 큐를 구현해봐야겠다!