백준 14268 JS 풀이(실패)

hun2__2·2023년 7월 15일
0

코딩테스트

목록 보기
4/48

구하는 값

내리갈굼 비용을 출력

핵심 아이디어

자신 아래 노드들에 모두 값을 더해주는 것이므로
인접리스트를 만들어서 트리를 만들어주고 input갚으로 호출된 노드부터 leaf노드까지 싹다 더해주면 될 것 같았다... 테케는 맞는데 어떤 반례가 있나..?

구현방법

  1. graph를 n+1 크기로 이차배열을 만들어주고
  2. input값의 각각을 index로 가지는 graph 배열에 index+1값을 넣어주면 자신의 자식노드들을 담고있는 graph가 완성된다.
  3. 이걸로 dfs돌림
  4. 근데 틀림..

코드

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

const [n, m] = input[0].split(" ").map(Number);

const graph = Array.from({ length: n + 1 }, () => []);
const arr = input[1].split(" ").map(Number);

for (let i = 1; i < m; i++) graph[arr[i]].push(i + 1);

// console.log(graph);

const ans = new Array(n + 1).fill(0);

for (let line = 2; line <= m + 1; line++) {
    const v = input[line].split(" ").map(Number);

    if (v[0] === 1) {
        const [, i, w] = v;
        // console.log("i, w", i, w);
        dfs(i, w);
    } else {
        const [, i] = v;
        console.log(ans[i]);
    }

    function dfs(cur, score) {
        // console.log("cur", cur);
        ans[cur] += score;

        for (const next of graph[cur]) {
            if (next === []) return;
            dfs(next, score);
        }
    }
}

테케들을 돌려봤을때 답은 맞았는데 메모리초가, 런타임 에러가 뜬다....후우,,,,

profile
과정을 적는 곳

0개의 댓글