queue
에 1번, 2번을 외친 왕자들을 push
하고 3번을 외친 왕자는 shift()
를 이용하여 삭제하는 방법function solution(prince, number) {
let answer = 0;
let queue = Array.from({ length: prince }, (v, i) => i + 1); // 길이가 8이고 1부터 8까지의 왕자를 담은 리스트
// queue 리스트에 요소가 없을 때까지 while문 돌리기
// 1번, 2번을 외친 왕자는 다시 queue 리스트에 추가
// 3번을 외친 왕자는 queue리스트에서 제외
// queue 리스트의 길이가 1이면 한 명의 왕자가 남았으므로 답이 된다.
while (queue.length) {
for (let i = 1; i < number; i++) queue.push(queue.shift());
queue.shift();
if (queue.length === 1) answer = queue.shift();
}
return answer;
}
console.log(solution(8, 3));
Array.from()
메서드 파라미터
Array.from()
메서드는 유사 배열 객체나 반복 가능한 객체를 얕게 복사해 새로운 배열 객체 생성Array.from({length: prince}, (v, i) => i+1);
{length: number}
를 통해서 배열의 길이를 정할 수 있고(value, index) => index + 1
을 통해서 배열의 요소 값을 넣을 수 있다!shift()
메서드
const array1 = [1, 2, 3];
const firstElem = array1.shift();
console.log(array1); // [2, 3]
console.log(firstElem); // 1