백준 알고리즘/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(", ")}>`);