개발자 톡
연습문제 톡
[21년 재직자 대회 본선] 거리 합 구하기
JS 런타임 에러
- 등록일
- 2024-11-13 18:11:41
- 조회수
- 71
- 작성자
- vavoya6324
런타임 에러 번호
32-2
34-2
50-2
52-2
54-2
다른 글에도 런타임 에러라는데 문제가 문제인건가요?
// 입력처리 const fs = require('fs') const input = fs.readFileSync('input.txt', 'utf8') .trim() .split(/\n+/) const nodeCount = +input[0] const edges = input.slice(1).map(v => v.trim().split(' ').map(Number)) const edgesObj = {} const weightSum = Array.from({length: nodeCount + 1}, () => [0, 0]) let rootNode = null edges.forEach(edge => { const [n, m, w] = edge if (rootNode === null) rootNode = n if (n in edgesObj) { edgesObj[n].push([m, w]) } else { edgesObj[n] = [[m, w]] } if (m in edgesObj) { edgesObj[m].push([n, w]) } else { edgesObj[m] = [[n, w]] } }) function getWeightFromChild(node, child, w) { const [childW, count] = weightSum[child] weightSum[node] = [childW + (count + 1) * w + weightSum[node][0], count + 1 + weightSum[node][1]] } function dfs(node, parent) { // 간선이 존재하면 if (node in edgesObj) { edgesObj[node].forEach(edge => { const [n, w] = edge if (n !== parent) { dfs(n, node) // 자식 노드가 정보를 얻어왔으니 달라고 요구하기 getWeightFromChild(node, n, w) } }) } } function getWeightFromParent(node, parent, w) { // 전체 가중치에서 // 그 외의 노드 개수 만큼 부모 ~ 본인 거리 가중치 더하기 let totalSum = weightSum[parent][0] // 자기 자신, 자식 노드의 개수 만큼 부모 ~ 본인 거리 가중치 빼기 totalSum -= w * (weightSum[node][1] + 1) // 본인, 자식 제외한 노드와의 거리를 위해 나머지 노드 개수 만큼 더하기 totalSum += w * (nodeCount - weightSum[node][1] - 1) weightSum[node] = [totalSum, weightSum[node][1]] } function dfs2(node, parent, weight) { // 부모로부터 정보 얻기. 있으면 if (parent) { getWeightFromParent(node, parent, weight) } if (node in edgesObj) { edgesObj[node].forEach(edge => { const [n, w] = edge if (n !== parent) { dfs2(n, node, w) } }) } } // 1을 루트 노드로 하기 dfs(rootNode, null) dfs2(rootNode, null) const result = [] for (let i = 1; i < weightSum.length; i++) { result.push(weightSum[i][0]) } console.log(result.join('\n')) /* 자 보자.. 그래프 탐색은 해야한다 DFS로 알 수 있는 정보 1. 자식 노드 까지의 거리 부모 노드는 자식 노드가 가진 가중치를 기반으로 자신의 자식 노드들에 대한 거리를 얻는다. 자식 노드는 부모 노드를 통해서 자신의 자식 노드 외의 정보를 얻는다. 각 노드 까지의 가중치를 구하고 더하는 것은 시간이 오버된다. (가중치를 구해두는 것에) */
#[21년_재직자_대회_본선]_거리_합_구하기