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);