コードテスト練習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)currbasketの最後の値が同じである場合、basketの最後の値は.pop()に減算される.
4)同じ価格で爆発した個数を計算するためにcnt+=2を行った.
5)currbasketの最後の値が異なる場合、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;
};

🙍‍♀️ 📝

filterreducemapの使い方の違いが紛らわしいとき!
ここです。中に入って会いましょう!