백준 알고리즘/Lang-node.js
[백준/node.js] 1158 요세푸스 문제
Jongung
2023. 1. 9. 23:07
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
- 사용언어 : node.js
- 알고리즘 : 자료구조, 큐
- Solved.ac Tier : Silver IV
node.js 코드
1. 문제 정리
선입 선출 방식의 큐를 사용하면 쉽게 해결 할 수 있는 문제이다. 반복문을 사용하여 계속 돌면서 shift로 맨 앞의 값을 뺀 뒤, 반복 횟수가 K의 배수인 경우엔 값을 다시 넣지 않고 아닌 경우엔 그냥 값을 넣는 방식으로 큐를 사용하여 문제를 해결 하였다.
2. 완성 코드
const filePath = process.platform === "linux" ? "/dev/stdin" : "ans.txt";
let [N, K] = require("fs").readFileSync(filePath).toString().trim().split(" ");
let arr = [...new Array(parseInt(N))].map((_, i) => i + 1);
const ans = [];
let cnt = 1;
while (arr.length) {
let data = arr.shift();
if (cnt % K == 0) {
ans.push(data);
} else {
arr.push(data);
}
cnt++;
}
console.log(`<${ans.join(", ")}>`);