[백준 알고리즘] Node.js 24445. 알고리즘 수업 - 너비 우선 탐색 2
2023. 6. 15. 13:25ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/24445
24445번: 알고리즘 수업 - 너비 우선 탐색 2
첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양
www.acmicpc.net
2. 풀이
- 처음 풀이는 24444번과 거의 비슷하게 풀었다. 24444번은 오름차순 정렬이었고, 24445번은 내림차순 정렬이기 때문에 sort() 부분만 수정하여 제출하였다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,m,r] = inputs.shift().split(' ').map(v => +v);
const numMap = new Map();
inputs.forEach(v => {
let [a,b] = v.split(' ').map(vv => +vv);
if(numMap.has(a)) numMap.get(a).push(b);
else numMap.set(a, [b])
if(numMap.has(b)) numMap.get(b).push(a);
else numMap.set(b, [a])
})
const visited = new Array(n + 1).fill(0);
const queue = [];
let count = 1;
queue.push(r);
visited[r] = 1;
while(queue.length){
const t = queue.shift();
const nodes = [...numMap.get(t)].sort((a,b) => b-a);
for(let node of nodes){
if(visited[node] === 0){
visited[node] = ++count;
queue.push(node)
}
}
}
console.log(visited.slice(1).join('\n'))
- 19% 정도에서 TypeError 발생... 24444번은 성공했는데 어떤 테스트케이스 때문에 그런건지 이해를 할 수 없다.
- 그래서 map 대신 array로 변경
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,m,r] = inputs.shift().split(' ').map(v => +v);
const graph = Array.from(Array(n+1), () => []);
const visited = new Array(n + 1).fill(0);
const queue = [];
let count = 1;
inputs.forEach(v => {
let [a,b] = v.split(' ').map(vv => +vv);
graph[a].push(b);
graph[b].push(a);
})
queue.push(r);
visited[r] = 1;
while(queue.length){
const t = queue.shift();
const nodes = graph[t].sort((a,b) => b-a);
for(let node of nodes){
if(visited[node] === 0){
visited[node] = ++count;
queue.push(node)
}
}
}
console.log(visited.slice(1).join('\n'))
- 아무래도 map() 부분에서 에러가 발생한 듯 하다. 이번건 통과!
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 7562. 나이트의 이동 (0) | 2023.06.21 |
---|---|
[백준 알고리즘] Node.js 1260. DFS와 BFS (0) | 2023.06.15 |
[백준 알고리즘] Node.js 24444. 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2023.06.15 |
[백준 알고리즘] Node.js 2805. 나무 자르기 (0) | 2023.06.09 |
[백준 알고리즘] Node.js 2740. 행렬 곱셈 (0) | 2023.06.07 |