[テストエンコーディング]JavaScript#9


質問する


問題の説明
ゲーム開発者「Jordy」はクレーン型の抽出機をモバイルゲームに変えようとしている.
ゲームの面白さを高めるために、「Jordie」は画面レイアウトとルールをゲームロジックに反映し、以下のようにします.

ゲーム画面は「1 x 1」サイズのセルからなる「NxN」サイズの正斜角メッシュで、上部にクレーン、右側にバスケットがあります.(上の図は、サイズが「5 x 5」の例を示しています).各格子間には様々なぬいぐるみがあり、ぬいぐるみのない格子は空いています.すべての人形は「1 x 1」の大きさのメッシュを占め、メッシュの一番下から順番に積み上げられます.ゲームユーザーはクレーンを左右に動かし、停止した位置から一番上の人形を持ち上げることができる.拾った人形はかごの中に積み上げられ、かごの一番下の格子から人形は順番にかごの中に積み上げられます.下の図は[1番、5番、3番の位置で人形を順番にかごに入れる様子を示しています.

同じ形の2人の人形が連続してかごに積まれると、2人の人形が爆発してかごから消えてしまいます.上の状態で、次に[5番]の位置で人形をかごに積み上げると、同じ形の人形が2つ消えてしまいます.

クレーンが作動すると、人形が挟まないことはありませんが、人形がないところでクレーンを起動すれば、何も起こりません.また、バスケットが十分大きく、すべての人形を収容できると仮定します.(図中、スクリーン表示制限は5コマのみ表示)
ゲーム画面上の格子状態の2次元配列板と人形を挟むために、起動クレーンの位置を含む配列動作をパラメータとして指定した場合、solution関数を完了し、クレーンをすべて起動させ、爆発して消えた人形の個数を返します.
せいげんじょうけん
  • マザーボードアレイは2 Dアレイで、サイズは「5 x 5」または「30 x 30」より大きい.
  • boardの各セルには、0または100以下の整数が含まれています.
  • 0はスペースを表します.
  • 1-100の各数字は異なる人形の形を表し、同じ数字は同じ人形の形を表す.
  • モバイルアレイのサイズは1000を超えません.
  • movies配列の各要素の値は1より大きく、自然数であり、スラブ配列の水平寸法より小さい.
  • I/O例
    boardmovesresult[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]][1,5,3,5,1,2,1,4]4
    [ソース]プログラマー(https://programmers.co.kr/learn/courses/30/lessons/64061)

    答え

    function solution(board, moves) {
        let basket = []
        let answer = 0
        function removeDoll(doll) {  //인형이 중복되었을 경우 삭제하는 함수
            if (doll.length > 1) {
               if (doll[doll.length-2] === doll[doll.length-1]) {
                answer += 2
                doll.pop();
                doll.pop();
            }
          }
        }
        for (let i=0; i<moves.length; i++) { //moves대로 board에서 인형을 뽑아서 바구니에 넣는 함수
            for (let j=0; j<board.length; j++) {
                if(board[j][moves[i]-1] !== 0) {
                   basket.push(board[j][moves[i]-1]);
                   board[j][moves[i]-1] = 0;
                   removeDoll(basket);
                    break;
                }
            }
        }
        return answer
    }
    人形機の中の人形を取り出してかごの中に入れた関数と繰り返して削除した関数を分けて、人形を1つ追加するたびに、かごの中の最後の人形と前の人形を比較して、同じ時に削除して+=2の構造を得ます.画像で問題を理解する過程は,他の符号化テスト問題とは異なり,新鮮である.