[アルゴリズム]プログラマー-クレーン型綱引きゲーム
6213 ワード
https://programmers.co.kr/learn/courses/30/lessons/64061
問題の説明
ゲーム画面上の格子状態の2次元配列板と人形を挟むために、起動クレーンの位置を含む配列動作をパラメータとして指定した場合、solution関数を完了し、クレーンをすべて起動させ、爆発して消えた人形の個数を返します.
この問題は操作図を見なければ理解できないので、そのリンクに入って問題を読んでください.
せいげんじょうけんボードアレイは2次元アレイであり、サイズは5 x 5または30 x 30以下である. boardの各セルには、0または100以下の整数が含まれています. 0はスペースを表します. 1-100の各数字は異なる人形の形を表し、同じ数字は同じ人形の形を表す. モバイルアレイのサイズは1000を超えません. movies配列の各要素の値は1より大きく、自然数であり、スラブ配列の水平寸法より小さい. I/O例
解決策
コードに記入します
問題の説明
ゲーム画面上の格子状態の2次元配列板と人形を挟むために、起動クレーンの位置を含む配列動作をパラメータとして指定した場合、solution関数を完了し、クレーンをすべて起動させ、爆発して消えた人形の個数を返します.
この問題は操作図を見なければ理解できないので、そのリンクに入って問題を読んでください.
せいげんじょうけん
解決策
コードに記入します
function solution(board, moves) {
let stack =[]; // 크레인으로 옮긴 인형을 담을 stack
let count=0; // 터트려진 인형 개수를 담을 변수
//외부 for문은 moves의 순서대로 작동해야하기때문에 moves의 길이만큼 순회함
for(let i = 0; i < moves.length; i++){
// 각 i에 대해 board에서 값을 찾아준다
for(let j = 0; j < board.length; j++){
// 탐색 대상이 되는 column에 인형이 있는지 확인
if(board[j][moves[i]-1]){
// 스택의 끝 값과 스택에 새로 넣을 값이 같을때는 두개 모두 터트리기
if(stack.length && stack[stack.length-1]===board[j][moves[i]-1]){
stack.pop();
count+=2;
}else{
//새로넣을값과 스택의 끝 값이 같지않으면 스택에 값 넣어주기
stack.push(board[j][moves[i]-1]);
}
board[j][moves[i]-1] = 0;
break;
}
}
}
return count;
}
Reference
この問題について([アルゴリズム]プログラマー-クレーン型綱引きゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@dolarge/알고리즘-프로그래머스-크레인-인형뽑기-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol