https://school.programmers.co.kr/learn/courses/30/lessons/86971?language=javascript#
wire 를 하나 끊으면 2개의 tree 그룹으로 나뉘어 지는데, 이때 남아있는 wires 를 통해 tree 그룹의 length 를 구할 수 있다.
즉 wires 를 돌면서 남아있는 wires 를 통해 tree 의 length 를 구하고 결과값을 비교하는 방식.
다른 사람들은 대부분 DFS 방식으로 풀었더라. 이게 더 좋은것 같네.
모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.
<script>
function solution(n, wires) {
let result = n;
wires.map((w, i) => {
const [n1, n2] = w;
let nextWires = wires.filter((fw, fi) => i !== fi);
if (nextWires.length === 0) {
return;
}
const arr = [nextWires[0][0]];
let count = 0;
while (arr.length > 0) {
const node = arr.shift();
count++;
nextWires.filter(nw => node === nw[0] || node === nw[1]).map(nw => {
arr.push(nw[0] === node ? nw[1] : nw[0]);
});
nextWires = nextWires.filter(nw => node !== nw[0] && node !== nw[1]);
}
const temp = Math.abs(count - (n - count));
result = result < temp ? result : temp;
});
return result === n ? 0 : result;
}
</script>