프로그래밍/알고리즘 풀이
[node.js] ABCDE ( 백준 13023번 )
카카수(kakasoo)
2021. 4. 8. 19:07
반응형
// 백준 13023번 ABCDE를 풀었습니다.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const input = [];
let N = 0;
let M = 0;
rl.on("line", (line) => {
if (!N) {
[N, M] = line.split(" ").map(Number);
} else {
input.push(line);
if (input.length === M) {
main();
process.exit();
}
}
});
let visited;
let arr;
let answer = [];
/**
*
* @param {[[]]} arr
* @param {number[]} visited
* @param {number} cur
*/
const dfs = (cur) => {
visited[cur] = true;
answer.push(cur);
if (answer.length === 5) {
console.log(1);
process.exit();
}
for (let i = 0; i < arr[cur].length; i++) {
const next = arr[cur][i];
if (visited[next] === false) {
dfs(next);
}
}
visited[cur] = false;
answer.pop();
};
const main = () => {
visited = new Array(N).fill(false);
arr = new Array(N).fill(0);
for (let i = 0; i < arr.length; i++) {
arr[i] = [];
}
for (let i = 0; i < input.length; i++) {
const [from, to] = input[i].split(" ").map(Number);
arr[from].push(to);
arr[to].push(from);
}
for (let i = 0; i < arr.length; i++) {
dfs(i);
}
console.log(0);
};
스택이 풀리면서 visited를 false로 초기화해주는 것이 중요하다.
탐색이 다 끝난 다음에 한꺼번에 초기화하는 방식으로는 안 된다. ( 내가 그렇게 해서 틀렸고, 반례를 만났다. )
오랜만의 그래프 문제인데 아직 감은 살아 있는 거 같다.
근데, javascript로 하는 게 약간 어색하다.
어색하다기보다, Cpp 냄새가 너무 심한 거 같다. :)
vector를 안 쓰고 배열로 해도 되는 건 그냥 생각하기 편해서 좋긴 한데, 입력이 귀찮다...
반응형