[TIL] 211114
14778 ワード
📝 今日作った
📚 学識
1.プログラマーの回答
1)クレンジング式油抜きゲーム
2019 KACA開発者冬季実習問題
(1)私が考える論理
1)クレンジング式油抜きゲーム
2019 KACA開発者冬季実習問題
(1)私が考える論理
まずmoves配列の要素値が1の場合、board配列の最初の要素(サブ配列)の最初の要素(インデックス0)の値が0であるかどうかを確認します.
0でない場合は、値を取り出してバスケット配列に押し込みます.
このとき、bank配列のi要素がi-1の要素と同じ場合、2つの要素がポップアップされ、deleteNum変数の値が+2になります.
次にmoves配列の次の要素の値を取得します.
0の場合、board配列の2番目の要素(サブ配列)の1番目の要素(インデックス0)の値が0であるかどうかを確認します.
0でないまで繰り返します.
board配列の最後の要素の最初の要素(インデックス0)さえ0の場合、move配列の次の要素に値を入力します.
moves配列の最後の要素に繰り返します.
(2)私の回答
const basket = [];
moves.reverse();
let cranePosition = moves.pop() - 1;
let movesLength = moves.length;
let deleteNum = 0;
人形を入れた空きかごのバスケット配列とクレーンの移動位置を表すCranePosition変数,爆発人形の個数を表すdeleteNum変数を作成した.
クレーンを動かすたびにshift()を使うよりも、reverse()とpop()を初めて使うほうが効率的だと思います.
const dollNum = board[i][cranePosition];
for (let i = 0; i < board.length; i++) {
if (dollNum !== 0) {
basket.push(dollNum);
board[i][cranePosition] = 0;
}
}
if (basket.length > 1) {
const last = basket.pop();
const secondToLast = basket.pop();
if (last === secondToLast) {
deleteNum = deleteNum + 2;
} else {
basket.push(secondToLast);
basket.push(last);
}
}
let cranePosition = moves.pop() - 1;
let movesLength = moves.length;
while (movesLength >= 0) {
for (let i = 0; i < board.length; i++) {
const dollNum = board[i][cranePosition];
if (dollNum !== 0) {
// 중략
break;
}
}
cranePosition = moves.pop() - 1;
movesLength--;
}
人形番号が0でない場合は、その番号をかごの配列に入れ、breakを使用してクレーンをすぐに次の位置に移動させ、for反復ドアから脱出します.その後、クレーンの位置を変更し、whileの繰り返し文の条件が正しい場合に上記の操作を繰り返します.
moves.lengthが0未満の場合は、クレーンが停止していることを示します.そのため、whileの繰り返し文は避けてください.
(3)最終コード
function solution(board, moves) {
const basket = [];
moves.reverse();
let cranePosition = moves.pop() - 1;
let movesLength = moves.length;
let deleteNum = 0;
while (movesLength >= 0) {
for (let i = 0; i < board.length; i++) {
const dollNum = board[i][cranePosition];
if (dollNum !== 0) {
basket.push(dollNum);
board[i][cranePosition] = 0;
if (basket.length > 1) {
const last = basket.pop();
const secondToLast = basket.pop();
if (last === secondToLast) {
deleteNum = deleteNum + 2;
} else {
basket.push(secondToLast);
basket.push(last);
}
}
break;
}
}
cranePosition = moves.pop() - 1;
movesLength--;
}
return deleteNum;
}
明日作った
Reference
この問題について([TIL] 211114), 我々は、より多くの情報をここで見つけました https://velog.io/@leesyong/TIL-211114-7vcsw4cmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol