姫を救う


  • In Progress
  • function solution(n, k) {
      let arr = [], queue = [];
      
      for(let i=0; i<n; i++) {
        arr.push(i+1);
      } 
      // [1, 2, 3, 4, 5, 6, 7, 8]
      
      while(arr.length > 1) {
        for(let i=1; i<=k; i++) { // 1부터 3까지
          queue.push(arr.shift()); // 새로운 배열(queue)에 arr배열의 첫번째 인덱스 넣기
          console.log(i+'회', queue);
        }
        queue.pop(); // queue 배열의 마지막을 제거
        
        console.log('length', arr.length, queue);
      }
    }
    
    console.log(solution(8, 3));
    -Output
    1[1]
    2 (2) [1, 2]
    3 (3) [1, 2, 3]
    length 5 (2) [1, 2]
    1 (3) [1, 2, 4]
    2 (4) [1, 2, 4, 5]
    3 (5) [1, 2, 4, 5, 6]
    length 2 (4) [1, 2, 4, 5]
    1 (5) [1, 2, 4, 5, 7]
    2 (6) [1, 2, 4, 5, 7, 8]
    3 (7) [1, 2, 4, 5, 7, 8, undefined]
    length 0 (6) [1, 2, 4, 5, 7, 8]
    トリックを使うようだ
    arr配列の長さが1より大きいまで.
    queue配列に値をプッシュするので、低い結果値で終了します
    結論arrの1から8サイクルで終了
    新しい配列にプッシュするのではなく、現在の配列にプッシュして1になるまで.