function solution(n, k) {
let answer;
let num = 1;
let arr = Array.from({ length: n }, (v, i) => i + 1);
while (arr.length !== 1) {
let temp = arr.shift();
if (num !== k) {
arr.push(temp);
num += 1;
} else num = 1;
}
answer = arr[0];
return answer;
}
console.log(solution(8, 3));
Array.from
을 한 번 사용해보는 연습이 된 것 같다.
function solution(n, k) {
let answer;
let num = 1;
let arr = Array.from({ length: n }, (v, i) => i + 1);
while (true) {
for (let i = 0; i < k - 1; i++) {
arr.push(arr.shift());
}
arr.shift();
if (arr.length === 1) {
answer = arr[0];
return answer;
}
}
}
console.log(solution(8, 3));
Solution 풀이를 힐끗 보고 내 풀이를 수정하였다.
- 1, 2, ... , K-1 까지 빼주고 K번째는 그냥 push를 안해주는 idea를 배웠음
function solution(n, k) {
let answer;
let queue = Array.from({ length: n }, (v, i) => i + 1);
while (queue.length) {
for (let i = 1; i < k; i++) queue.push(queue.shift());
queue.shift();
if (queue.length === 1) answer = queue.shift();
}
return answer;
}
console.log(solution(8, 3));
while문 조건이 너무 깔끔하게 되어있었다.
처음에는 왜while(true)
를 안한거지? 싶었는데
마지막에 shift되면 탈출한다는 생각은... 보고 감탄을 했다...