kakasoo

[node.js] 모든 순열 ( 백준 10974번 ) 본문

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

[node.js] 모든 순열 ( 백준 10974번 )

카카수(kakasoo) 2021. 7. 30. 15:57
반응형
// 백준 10974번 모든 순열을 풀었습니다.

const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

rl.on("line", (line) => {
    const elements = new Array(Number(line)).fill(0).map((el, i) => i + 1);

    const result = [...permutations(elements)].map((el) => el.join(" ")).sort();

    for (const a of result) {
        console.log(a);
    }
});

/**
 *
 * @param {number[]} elements
 */
function* permutations(elements) {
    if (elements.length === 1) {
        yield elements;
    } else {
        const [first, ...rest] = elements;

        for (const a of permutations(rest)) {
            for (let i = 0; i < elements.length; i++) {
                const start = a.slice(0, i);
                const ended = a.slice(i);

                yield [...start, first, ...ended];
            }
        }
    }
}

혹시라도 이 내용을 보는 분이 있다면, 순열에 대한 공식은 그냥 외우라고 하고 싶다.
C++이나 파이썬에서는 순열과 조합이 제공되는 것 같던데, JS에는 그런 게 없다.
제너레이터가 생소하다면 한 번 외워둘 만 하다.

반응형