PS/프로그래머스

[BFS]전력망을 둘로 나누기

returnzero 2022. 7. 21. 21:53
function solution(n, wires) {
    var answer = 100;

    function BFS(startNode,arrOfWire){
        let Q=[];
        let visited=new Array(n+1).fill(false);//4번 visited
        visited[startNode]=true;
        Q.push(startNode);
        let counter=0;
        while(Q.length){
            let Node= Q.shift();
            counter++;
            for(let i=0; i<arrOfWire.length;i++){
                if(arrOfWire[i][0]===Node){
                    let NextNode = arrOfWire[i][1];
                    if(visited[NextNode]===false){
                        visited[NextNode]=true;
                        Q.push(NextNode);
                    }
                }
                else if(arrOfWire[i][1]===Node){
                    let NextNode = arrOfWire[i][0];
                    if(visited[NextNode]===false){
                        visited[NextNode]=true;
                        Q.push(NextNode);
                    }
                }
            }
        }
        // console.log("VISTED",visited)
    return counter;
    }

    for (let i=0; i<wires.length;i++){
        let a= [...wires.slice(0,i),...wires.slice(i+1)]; //
        let [from ,to ]=wires[i];
        // console.log(from,to,a);
        let num1= BFS(from, a);
        let num2= BFS(to, a);
        answer= Math.min(answer, Math.abs(num1-num2));
        // console.log("NUM",num1,num2);
    }
    
    return answer;
}

간선이 하나씩 빠진 모든 케이스에 대해서 BFS를 실행하면 해결된다.

주목할만한 코드로는

        let a= [...wires.slice(0,i),...wires.slice(i+1)]; //

하게 되면 i번째 원소를 제외한 배열을 return할 수 있다.