コードテスト練習32:[Programmers]2019 KACA開発者冬季実習/起重型抽選ゲーム
ソース:プログラマ 使用言語:JavaScript
イニシャルコード
function solution(board, moves) {
var answer = 0;
return answer;
}
私が書いたコード
function solution(board, moves) {
let basket=[];
let cnt=0;
for(let i =0;i<moves.length;i++){
let moveNum = moves[i]-1;
for(let j=0;j<board.length;j++){
let curr=board[j][moveNum];
if( curr === 0){
continue;
}
if(curr===basket[basket.length-1]){
basket.pop();
cnt+=2;
}else{
basket.push(curr);
}
board[j][moveNum]=0;
break;
}
}
return cnt;
}
の解答過程を説明します!1)
for
ゲートでmoves
列を囲み、そのうちfor
ゲート、board
ゲートで、現在のクレーン選択値をcurr
に入れる.2)
curr
の値が0の場合、選択できないため、continue
を使用して戻ります.3)
curr
とbasket
の最後の値が同じである場合、basket
の最後の値は.pop()
に減算される.4)同じ価格で爆発した個数を計算するために
cnt+=2
を行った.5)
curr
とbasket
の最後の値が異なる場合、basket
の最後にcurr
を加える.6)上記の手順を経て、現在選択されている値を
0
とし、次の起重動作に影響を及ぼさない.7)次の動作をスムーズにするためには,
break
を行う必要がある.以下の画像を参照してください.
他人を解く
const transpose = matrix =>
matrix.reduce(
(result, row) => row.map((_, i) => [...(result[i] || []), row[i]]),
[]
);
const solution = (board, moves) => {
const stacks = transpose(board).map(row =>
row.reverse().filter(el => el !== 0)
);
const basket = [];
let result = 0;
for (const move of moves) {
const pop = stacks[move - 1].pop();
if (!pop) continue;
if (pop === basket[basket.length - 1]) {
basket.pop();
result += 2;
continue;
}
basket.push(pop);
}
return result;
};
🙍♀️ 📝
filter
、reduce
、map
の使い方の違いが紛らわしいとき!ここです。中に入って会いましょう!
Reference
この問題について(コードテスト練習32:[Programmers]2019 KACA開発者冬季実習/起重型抽選ゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@gyomni/코딩테스트-연습-32-프로그래머스-2019-카카오-개발자-겨울-인턴십-크레인-인형뽑기-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol