큐
요세푸스 문제
요세푸스 문제
function solution(case1) {
const [N, K] = case1.split(" ").map(Number);
let count = 1;
let ONE = Array.from({ length: N }, (_v, i) => i + 1);
let answer = [];
while (ONE.length > 0) {
const shiftItem = ONE.shift();
if (count % K === 0) {
answer.push(shiftItem);
} else {
ONE.push(shiftItem);
}
count++;
}
return `<${answer.join(", ")}>`;
}
const case1 = `7 3`;
console.log(solution(case1));
let ONE = Array.from({ length: N }, (_v, i) => i + 1);
1부터 7까지의 배열을 만든다.
while (ONE.length > 0) {
const shiftItem = ONE.shift();
if (count % K === 0) {
answer.push(shiftItem);
} else {
ONE.push(shiftItem);
}
count++;
}
ONE의 배열이 없어질때 까지 무한 루프를 돈다.
const shiftItem = ONE.shift(); 를 통해 앞 사람을 빼낸다.
count % K === 0 K번째 사람일시 요세푸스 수열에 넣는다.
그게 아니라면 ONE에 다시 넣는다.