[PyLv 1]クレーン兄抽出ゲーム


-問題の説明


ゲーム開発者「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例



    -方法


    Kakaoの出題は緊張していて、問題を解いてみました.
    質問をゆっくり読んで、二次元リストの理解度を確認しておいたようです.
    2 D配列のインデックスとappendを知っている場合は、
    .
    次に必要なのはスタックです.
    以前「これが符号化テストです」でスタックとキューを学習しました.
    当時見たpopを使用して値を削除するコードを追加できます.
    00:00に軽く解いてから寝るべきだと思いますが、03:20になってやっと解けました.
    寝てもいいよ・・・😥
    ===================================================================
    def solution(board, moves):
        result = []
        count = 0
        for i in moves:
            for j in range(len(board)):
                if board[j][i-1] != 0:
                    result.append(board[j][i-1])
                    board[j][i-1] = 0
                    
                    if len(result) > 1:
                        if result[-1] == result[-2]:
                            result.pop(-1)
                            result.pop(-1)
                            count += 2     
                    break
            
        return count