Level2 - 전력망을 둘로 나누기

손대중·2022년 7월 16일
0

문제 설명 및 링크

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>

0개의 댓글