PS/제코베 JS 100제

제코베 JS 100제 / 78 / 원형 테이블

KimMinJun 2022. 9. 21. 21:08

기린은 중국집에서 친구들과 만나기로 하고, 음식을 시켰습니다.

음식이 나오고 한참을 기다렸지만 만나기로 한 친구 2명이 오지 않았어요.

 

기린은 배가 너무 고파 혼자 음식을 먹기 시작합니다. 원형 테이블에는 N개의 음식들이 있습니다.

한 개의 음식을 다 먹으면 그 음식의 시계방향으로 K 번째 음식을 먹습니다.

하지만 아직 오지 않은 친구들을 위해 2개의 접시를 남겨야 합니다.

 

마지막으로 남는 음식은 어떤 접시인가요?

 

 

 

/**
 * 첫 번째 가져가는 음식이 K 번째 음식이며
 *
 * 나머지는 첫 번째 음식으로부터 시계방향으로 가져간다
 *
 * @param {Number} N 음식의 개수
 * @param {Number} K 먹은 음식 다음으로 K번째 음식을 먹는다
 * @returns {Number[]} 남은 음식들의 번호
 */
function roundTable(N, K) {
  // N의 길이를 가진 배열 0으로 초기화, 생성
  let isFoodRest = Array.from({ length: N }, () => 0);
  // 첫번째 음식이 1번이므로 각 인덱스보다 1만큼 크게 value 초기화
  isFoodRest.forEach((_, idx) => {
    isFoodRest[idx] = idx + 1;
  });

  let idx = K - 1;

  while (isFoodRest.length > 2) {
    idx = idx % isFoodRest.length;
    isFoodRest.splice(idx, 1);
    // idx 번째 value를 삭제했으므로 뒤의 요소들이 인덱스가 하나씩 줄어든다.
    // 따라서 원래 테이블처럼 해당 인덱스에 접근하려면 -1을 해주어야 한다.
    idx += K - 1;
  }

  return isFoodRest;
}

const N = 6;
const K = 3;

const result = roundTable(N, K);
console.log(result);