연습장/백준(BOJ) 문제풀이
[백준 11725 - Node.js] 트리의 부모 찾기
Tesseractjh
2022. 5. 20. 13:49
🔗 문제 링크
https://www.acmicpc.net/problem/11725
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
✏️ 풀이
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input.shift();
const edges = input.map(v => v.split(' ').map(Number));
const tree = [...Array(N + 1)].map(() => []);
const relations = [];
edges.forEach(([a, b]) => {
tree[a].push(b);
tree[b].push(a);
});
const bfs = () => {
const visited = Array(N + 1).fill(false);
visited[1] = true;
let queue = [1];
let stack;
while (queue.length) {
stack = queue;
queue = [];
while (stack.length) {
const node = stack.pop();
const children = tree[node];
if (children) {
children.forEach(child => {
if (!visited[child]) {
visited[child] = true;
relations[child] = node;
queue.push(child);
}
});
}
}
}
};
bfs();
console.log(relations.slice(2).join('\n'));
주어진 간선 정보를 바탕으로 tree에 인접 배열을 만들어 저장하였다.
BFS를 하면서 queue에 push되는 노드들은 곧 현재 노드의 자식 노드들이다.
이 때, relations에 해당 자식 노드들의 부모를 현재 노드로 저장한다.
BFS가 끝난 뒤, relations의 인덱스 2부터 개행문자로 묶어서 출력하였다.