기린은 중국집에서 친구들과 만나기로 하고, 음식을 시켰습니다.
음식이 나오고 한참을 기다렸지만 만나기로 한 친구 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);
'PS > 제코베 JS 100제' 카테고리의 다른 글
제코베 JS 100제 / 80 / 순열과 조합 (1) | 2022.09.22 |
---|---|
제코베 JS 100제 / 79 / 순회하는 리스트 (1) | 2022.09.21 |
제코베 JS 100제 / 77 / 가장 긴 공통 부분 문자열 (0) | 2022.09.21 |
제코베 JS 100제 / 76 / 안전한 땅 (2) | 2022.09.21 |