[programmers]クレーン人形を捕まえるゲーム
9612 ワード
クレーン人形をつかむゲーム-JavaScriptを解読する
👉 プログラマ質問リンク
解題ロジック
2-1. 列に0以外の要素が含まれている場合は、値を返し、要素の値を0に変更します.
2-2. 列にゼロ以外の要素がない場合は、0
3-1. 2から抽出した数字が0の場合、コンテナには格納されません.
3-2. 2から抽出した数字が0ではなく、コンテナが空の場合は、直接数字を保存します.
3-3. 2から抽出した数字が0ではなく、容器が空ではない場合、容器の最後の数字を2から抽出した数字と比較します.
3-3-1. 比較する数字が違うと、数字を保存します.
3-3-2. 比較した数値が同じ場合は、コンテナの最後の数を削除し、count変数の値を2に増やします.
function solution(board, moves) {
let count = 0;
const boardLength = board.length; // 반복문 시행 시 매번 length를 계산하지 않도록 미리 변수로 설정
const movesLength = moves.length; // 반복문 시행 시 매번 length를 계산하지 않도록 미리 변수로 설정
const container = []; // 뽑은 숫자(인형)을 저장할 별도의 배열
// 2차원 배열 board에서 숫자를 확인해서 뽑는 과정을 구현한 함수
const selectNumber = function(seletedColumn){
for(let i = 0; i < boardLength; i++){
// 선택 된 열의 모든 행의 값을 확인하며 0이 아닌 수를 찾는 과정
if(board[i][seletedColumn]){
const result = board[i][seletedColumn]; // 0이 아닌수를 result에 저장
board[i][seletedColumn] = 0; // 해당 요소의 값은 0으로 변경 (인형이 제거됨을 의미)
return result; // result를 리턴
}
}
return 0; // 0이 아닌 값을 찾지 못했다면 0을 리턴 (해당 열에는 인형이 없음을 의미)
}
// 뽑은 숫자(인형)을 별도의 컨테이너에 저장하는 과정을 구현한 함수
const pushToContainer = function(selectedNumber){
// 1. 뽑은 숫자가 0이면 함수를 종료한다.
if(!selectedNumber) return;
// 2. 컨테이너가 비어있다면 숫자를 그냥 저장한다.
if(container.length === 0){
container.push(selectedNumber);
return;
}
// 3. 컨테이너가 비어있지 않다면 기존 저장된 숫자와 새로 뽑은 숫자를 비교한다.
// 3-1. 비교한 숫자가 다르면 숫자를 그냥 저장한다.
// 3-2. 비교한 숫자가 같으면 컨테이너의 마지막 숫자를 제거하고 count의 값을 2 증가시킨다.
if(selectedNumber !== container[container.length-1]){
container.push(selectedNumber);
return;
} else if(selectedNumber === container[container.length-1]){
container.pop();
count+=2;
return;
}
}
// 실제 코드 동작부 - moves 배열의 원소를 순회하며 selectNumber 함수와 pushToContainer 함수를 호출
for(let i = 0; i < movesLength; i++){
const seletedColumn = moves[i]-1;
pushToContainer(selectNumber(seletedColumn));
}
return count;
}
Reference
この問題について([programmers]クレーン人形を捕まえるゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@nomadhj/Programmers-크레인-인형-뽑기-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol