JS 알고리즘 문제풀이/섹션 6. 자료구조(스택, 큐)

6.공주구하기(큐)

crab. 2022. 6. 27. 07:34
반응형

📌강의 정리

큐를 사용하는 문제이다. 처음에 주어진 길이만큼 배열을 만든다.

그 다음 반복을 돌면서 주어진 숫자만큼 앞에서 shift하고 그 숫자를 뒤로 push한다.

이후 주어진 숫자의 반복이 끝나면 한번더 shift 하고 그걸 배열의 길이가 1일때까지 반복하다

길이가 1이 되면 배열의 숫자를 반환한다.

 

📌느낀점

오랜만에 잘 푼 문제인 것 같다.

디테일이 살짝 아쉽지만 그건 이제부터 조금씩 챙기기로 하고

우선 문제를 풀었다는 점이 뿌듯하다.

Array.from을 머리에 잘 새겨놓자.

 

//나의코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(n, k) {
        let answer;
        let queue = [];
        for (let i = 1; i <= n; i++) queue.push(i);
        while (queue.length !== 1) {
          for (let j = 0; j < k - 1; j++) {
            queue.push(queue.shift());
          }
          queue.shift();
        }
        answer = queue[0];
        return answer;
      }
      //처음에 큐를 만들때 순서대로 만들고
      //반복문으로 k만큼 숫자를 맨앞에서 뒤로 보낸다.
      //이후 숫자하나를 쉬프트하고 다시 앞에서 뒤로 보낸다.
      //숫자 하나가 남을때까지 반복하고 그 숫자를 반환한다.
      console.log(solution(8, 3));
    </script>
  </body>
</html>
//강사님 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      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));
    </script>
  </body>
</html>
반응형