[AlgorithmProblem]クレーン兄抽出ゲーム
質問する
ゲーム画面は「1 x 1」サイズのセルからなる「NxN」サイズの正斜角メッシュで、上部にクレーン、右側にバスケットがあります.(上の図は、サイズが「5 x 5」の例を示しています).各格子間には様々なぬいぐるみがあり、ぬいぐるみのない格子は空いています.すべての人形は「1 x 1」の大きさのメッシュを占め、メッシュの一番下から順番に積み上げられます.ゲームユーザーはクレーンを左右に動かし、停止した位置から一番上の人形を持ち上げることができる.拾った人形はかごの中に積み上げられ、かごの一番下の格子から人形は順番にかごの中に積み上げられます.下の図は[1番、5番、3番の位置で人形を順番にかごに入れる様子を示しています.
同じ形の2人の人形が連続してかごに積まれると、2人の人形が爆発してかごから消えてしまいます.上の状態で、次に[5番]の位置で人形をかごに積み上げると、同じ形の人形が2つ消えてしまいます.
クレーンが作動すると、人形が挟まないことはありませんが、人形がないところでクレーンを起動すれば、何も起こりません.また、バスケットが十分大きく、すべての人形を収容できると仮定します.(図中、スクリーン表示制限は5コマのみ表示)
ゲーム画面上の格子状態の2次元配列板と人形を挟むために、起動クレーンの位置を含む配列動作をパラメータとして指定した場合、solution関数を完了し、クレーンをすべて起動させ、爆発して消えた人形の個数を返します.
[制限]
board配列は2次元配列であり、サイズは「5 x 5」または「30 x 30」より大きい.
boardの各セルには、0または100より大きい整数が含まれています.
0はスペースです.
1から100の数字はそれぞれ異なる人形の形を表し、同じ数字は同じ形の人形を表す.
moves配列のサイズは1000を超えない.
moves配列の各要素の値は1より大きく、board配列の水平サイズよりも自然数です.
コード#コード#
function solution(board, moves) {
let stack = [];
let count = 0;
for (let i = 0; i < moves.length; i++) {
for (let j = 0; j < board.length; j++) {
if (board[j][moves[i] - 1] !== 0) {
stack.push(board[j][moves[i] - 1]);
board[j][moves[i] - 1] = 0;
break;
}
}
while (stack[stack.length - 1] === stack[stack.length - 2] && stack.length !== 0) {
stack.pop();
stack.pop();
count += 2;
}
}
return count;
}
に答える
この位置にある最初の数字をスタックに繰り返します.
途中でスタックされた最後の2つが同じ場合は、削除後にcountがリフレッシュされます.
出典:プログラマーコードテスト練習、https://programmers.co.kr/learn/challenges
Reference
この問題について([AlgorithmProblem]クレーン兄抽出ゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@idhyo0o/Algorithm-Problem-크레인-인형뽑기-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol