[알고리즘] 백준 1068 트리 (JS)

Daon·2023년 3월 29일
0

알고리즘

목록 보기
11/11


요구사항

1.지워지는 노드를 제외하고 리프노드의 개수를 구하라

내풀이

const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = require("fs").readFileSync(filePath).toString().split("\n");
const iN = +input[0];
const iTreeList = input[1].split(" ").map(Number);
const iElase = +input[2];
solution(iN, iTreeList, iElase);
function solution(n, treeList, elase) {
  let cnt = 0;
  let tree = [];
  let rootNode = 0;
  treeList.forEach((node, idx) => {
    if (node === -1) {
      rootNode = idx;
      return;
    }
    if (!tree[node]) tree[node] = [];
    tree[node].push(idx);
  });
  const dfs = (node) => {
    if (rootNode === elase) return 0;
    if (!tree[node]) {
      cnt++;
      return;
    }
    tree[node].forEach((item) => {
      if (item === elase) {
        if (tree[node].length === 1) cnt++;
        return;
      }
      dfs(item);
    });
    return cnt;
  };
  console.log(dfs(rootNode));
}

tree를 어떻게 구현할지 몰라서 찾아봤는데 그냥 배열로 index를 부모삼아서 풀이하는걸 참고하였다

profile
같이 일하고싶은 그런 개발자!

0개의 댓글