kakasoo

[node.js] 요세푸스 문제 ( 백준 1158번 ) 본문

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

[node.js] 요세푸스 문제 ( 백준 1158번 )

카카수(kakasoo) 2021. 4. 16. 15:21
반응형
const readline = require("readline");

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

rl.on("line", (line) => {
    main(line);
}).on("close", () => process.exit());

/**
 *
 * @param {string} line
 */
const main = (line) => {
    const [N, K] = line.split(" ").map(Number);
    const arr = new Array(N).fill(0).map((el, i) => i + 1);
    let answer = "<";

    while (arr.length) {
        for (let i = 0; i < K; i++) {
            arr.push(arr.shift());
        }

        if (arr.length === 1) {
            answer += `${arr.pop()}>`;
        } else {
            answer += `${arr.pop()}, `;
        }
    }
    console.log(answer);
};

실제 역사에 있었던 사건을 문제로 구성한 거라 한다. N명의 사람 중 K번째 사람을 죽이길 반복 ( 각자 자기 옆, 또는 옆옆, 어쨌거나 지정된 사람을 죽인다. ) 하기로 한 것. 최종적으로 1명만 살아남게 될 텐데, 요세푸스는 죽고 싶지 않아서 이 문제를 풀고 자신이 살아남을 수 있는 자리로 갔다고 한다.
로마에게 항복하지 않으려는 유대인들이, 죽음을 감수했던 때라, 요세푸스는 배신자 취급이라고.

반응형