★ 공주 구하기 : Queue

frenchkebab·2021년 8월 25일
0
post-thumbnail


내 풀이

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를 배웠음

Solution 풀이

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되면 탈출한다는 생각은... 보고 감탄을 했다...

profile
Blockchain Dev Journey

0개의 댓글