난이도 : **
소요시간 : 25분
큐 초기화:
Array.from
을 사용하여 1부터 N까지의 숫자로 이루어진 배열(큐)을 초기화합니다.const queue = Array.from({ length: n }, (_, i) => i + 1);
순환적 인덱스 계산:
(index + k - 1) % queue.length
를 사용하여 제거할 사람의 인덱스를 계산합니다. 여기서 % queue.length
는 큐의 길이를 벗어나지 않도록 인덱스를 순환시킵니다.index = (index + k - 1) % queue.length;
요소 제거 및 결과에 추가:
splice
메서드를 사용하여 계산된 인덱스의 요소를 제거하고, 그 요소를 결과 배열에 추가합니다.result.push(queue.splice(index, 1)[0]);
반복:
while (queue.length > 0) {
// 인덱스 계산 및 요소 제거
}
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
const input = fs.readFileSync(filePath).toString().trim().split(" ");
const N = Number(input[0]);
const K = Number(input[1]);
// 큐를 초기화합니다. 큐의 길이는 n이고, 각 요소는 1부터 n까지의 숫자입니다.
const josephus = (n,k) => {
const result = [];
const queue = Array.from({ length : n }, (_, i) => i + 1);
let index = 0;
while(queue.length > 0){
index = (index + k - 1) % queue.length;
result.push(queue.splice(index, 1)[0])
}
return result;
}
const result = josephus(N, K);
console.log(`<${result.join(', ')}>`);
큐를 이용하는 것과 순환적으로 인덱스에 접근하는 방식을 떠올려 코드로 풀어낼 수 있느냐가 관건인 문제라고 생각한다.