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할 수 있다.