[알고리즘] 백준 1158 요세푸스 문제 (자바스크립트)

Subin·2022년 12월 22일
0
post-thumbnail
post-custom-banner


요세푸스 문제

✏️ 요구 사항 분석

요세푸스 문제

  • 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아 있다.
  • 순서대로 K번째 사람을 제거한다.
  • 위의 과정은 N명의 사람이 모두 제거될 때까지 계속된다.

🗒 내 풀이

function solution(case1) {
  const [N, K] = case1.split(" ").map(Number);
  let count = 1;
  let ONE = Array.from({ length: N }, (_v, i) => i + 1);
  let answer = [];
  while (ONE.length > 0) {
    const shiftItem = ONE.shift();
    if (count % K === 0) {
      answer.push(shiftItem);
    } else {
      ONE.push(shiftItem);
    }
    count++;
  }
  return `<${answer.join(", ")}>`;
}

const case1 = `7 3`;

console.log(solution(case1));

⌨️ 풀이 과정

1

let ONE = Array.from({ length: N }, (_v, i) => i + 1);

1부터 7까지의 배열을 만든다.

2

while (ONE.length > 0) {
  const shiftItem = ONE.shift();
    if (count % K === 0) {
      answer.push(shiftItem);
    } else {
      ONE.push(shiftItem);
    }
  count++;
}

ONE의 배열이 없어질때 까지 무한 루프를 돈다.
const shiftItem = ONE.shift(); 를 통해 앞 사람을 빼낸다.
count % K === 0 K번째 사람일시 요세푸스 수열에 넣는다.
그게 아니라면 ONE에 다시 넣는다.

profile
고양이가 세상을 지배한다.
post-custom-banner

0개의 댓글