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를 부모삼아서 풀이하는걸 참고하였다