kakasoo

[node.js] ABCDE ( 백준 13023번 ) 본문

프로그래밍/알고리즘 풀이

[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를 안 쓰고 배열로 해도 되는 건 그냥 생각하기 편해서 좋긴 한데, 입력이 귀찮다...

반응형