[백준 1158] 요세푸스 문제 with node.js

waterglasses·2022년 3월 22일
0
post-thumbnail

📌 문제

https://www.acmicpc.net/problem/1158

📌 풀이

  • 원형 큐를 생각해서 문제를 풀었다.
  • 우선 personsCds에 1부터 N까지의 사람들의 숫자를 배열로 만들었다. 예전에는 for문으로 하나하나 만들었던 반면 Array.from을 사용하여 편하게 작성하였다.
  • K번째 사람 전까지 배열의 가장 앞에 있는 사람을(shift()사용) 빼주면서 바로 다시 큐(personsCd)에 넣어주었고 K번째가 되었을 때 pop()으로 빼서 정답에 넣어주었다.

📌 코드

const fs = require('fs');
const stdin = (process.platform === 'linux' ? fs.readFileSync('/dev/stdin').toString().trim() : `7 3`).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const [N, K] = input().split(' ').map(Number);
const personCds = Array.from(Array(N), (value, idx) => idx + 1);
const answer = [];
while (personCds.length) {
  for (let i = 0; i < K; i++) {
    personCds.push(personCds.shift());
  }
  answer.push(personCds.pop());
}

console.log(`<${answer.join(', ')}>`);

📌 느낀점

사실 오늘 푼 문제는 전에 풀었었던 문제이다.

예전에 풀었던 1부터 N까지 초기화하는 방식은 이렇게 했었다.

for (let i = 1; i <= N; i++) {
  queue.push(i);
}

하지만 Array.from으로 이렇게 작성할 수 있었다는 것을 알고 적용해보았다!

const personCds = Array.from(Array(N), (value, idx) => idx + 1);

다음에도 바로 적용해서 풀 수 있기를!🙏🏻

profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글