문제: N과 K가 주어질 때 공주를 구하러 갈 왕자의 번호를 출력해라!
왕자들이 N명이 있으며, 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다.그리고 1번 왕자부터 N 번 왕자까지 순서대로 앉아서, 1번 왕자부터 n번 왕자까지 순서대로 1부터 번호를 한개씩 말한다.
K(특정숫자)를 말한 왕자는 공주를 구하러 갈 수 없다. 제외된 왕자의 다음 왕자부터 다시 1부터 시작하여 번호를 한개씩 말한다.
입력
N : 왕자의 수
K : 특정 숫자
function solution(n, k) {
let answer;
let que = [];
for (let prince = 1; prince <= n; prince++) {
que.push(prince);
console.log(que);
}
while (que.length !== 1) {
for (let prince = 1; prince < k; prince++) {
que.push(que.shift());
}
que.shift();
}
return que[0];
}
console.log(solution(8, 3));
선생님은 queue 배열에 1부터 n까지의 수를 순서대로 담을때 Array.form() 메소드로 유사배열방식으로 담아줬다.
ex) [1,2,3,4,5,6,7,8]
let queue = Array.from({length:n}, (v, i) => i+1)
// 길이는 n 까지의 배열을 만든다.
// v(value)와 i(index)를 전달받아서 i+1을 queue []에 담아준다.
// i+1인 이유는 왕자는 1번 부터기때문에 인덱스는 0부터니깐 1을 더해줘서 1부터 배열에 n길이만큼 담아주는 것
while문의 조건설정이 달랐고, 내부에 if문을 한번 더 사용해서 1일경우 따로 조건을 설정해주심
while (queue.length) // if(que.length === 1) que.shift();