백준-Node.js-11866, 요세푸스 문제 0

송철진·2023년 2월 24일
0

백준-Node.js

목록 보기
36/69

풀이

const fs = require('fs');
const [n, k] = fs.readFileSync("/dev/stdin").toString().trim().split(' ').map(Number)

const solution = (n, k) => {
  let arr = new Array(n).fill(0)
  arr.forEach((el, i) => arr[i] = (arr[i-1] || 0) + 1)
    
  let i = -1
  let count = 0
  let result = []
  
  while(result.length !== n){
    i++
    count++
    if(count % k === 0){
      result.push(arr[i])   
      arr.splice(i,1)
      i--
    }
    if(i === arr.length-1){
      i = -1
    }
  }
  return '<' + result.join(', ') + '>'
}

console.log(solution(n, k))
  1. 1 ~ n 으로 구성된 배열 arr 을 생성한다.
  let arr = new Array(n).fill(0)
  arr.forEach((el, i) => arr[i] = (arr[i-1] || 0) + 1)
  1. arr의 인덱스 i, k의 배수마다 사람을 제거해야하므로 한사람씩 셀 때마다 증가시키는 count, 제거한 사람을 차례로 넣을 배열 result를 선언한다.

  2. count가 k의 배수이면 arr에서 해당 사람을 result로 push()하고 splice()로 제거하고 i를 -1 시킨다.

  3. i가 arr의 마지막 인덱스가 되면 다시 처음 인덱스로 설정한다.

i, count, result, arr

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글