Algorithm/JavaScript
[백준/JS] 1158번_요세푸스 문제
dbfl9911
2023. 12. 13. 17:28
반응형
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
[ 문제 설명 ]
예제에서 N = 7, K = 3으로 주어졌으므로 1,2,3,4,5,6,7 이렇게 있다면 먼저 3번째 수인 3을 꺼내기 위해서는
앞의 1,2를 꺼낸 후 3을 꺼내서 제거해야한다. 꺼낸 1,2는 7뒤에 붙어서 3을 꺼낸 후 형태는 4,5,6,7,1,2 가 되므로 다음
꺼낼 세번째 수로는 6이 되고 이 과정이 모든 수가 제거될 때까지 반복된다.
[ 문제 풀이 ]
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(e=>e.replace("\r",""));
const [n,k] = input[0].split(' ');
const queue = [];
const answer = [];
for (let i = 0; i < n; i++){
queue.push(i+1);
}
let count = 1;
// 배열의 길이 0이 될 때까지 while문 통해 큐에서 맨 앞자리 하나빼줌(shift 이용)
while (queue.length) {
const shiftItem = queue.shift();
// 만약 k번째라면 answer에 push
if (count % k === 0) {
answer.push(shiftItem); // 3
// 아니면 큐에 다시 push
}else {
queue.push(shiftItem); // 1,2
}
count += 1;
}
console.log(`<${answer.join(', ')}>`);
반응형