🔗 문제 링크
https://www.acmicpc.net/problem/11725
✏️ 풀이
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부터 개행문자로 묶어서 출력하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 1707 - Node.js] 이분 그래프 (0) | 2022.05.26 |
---|---|
[백준 1520 - Node.js] 내리막길 (0) | 2022.05.22 |
[백준 2644 - Node.js] 촌수계산 (0) | 2022.05.19 |
[백준 16236 - Node.js] 아기 상어 (0) | 2022.05.18 |
[백준 2583 - Node.js] 영역 구하기 (0) | 2022.05.16 |