[etc] 크레인 인형뽑기 게임


문제 설명

문제는 프로그래머스 에서 확인

img

고민….

  • 2차원 배열 기계에서 맨 위의 값들만 가져와서 계산해야함
  • 맨 위의 값들을 가져오기 힘드니깐 90도 회전해서 맨 앞의 값들만 빼오면 쉬울듯

내 풀이


var a = [
            [0,0,0,0,0],
            [0,0,1,0,3],
            [0,2,5,0,1],
            [4,2,4,4,2],
            [3,5,1,3,1]
        ];
var b = [1,5,3,5,1,2,1,4];


console.log( solution(a,b) )


function solution(board, moves) {
    
    var width = board.length;

    //빈 board 생성
    let rotate_board = [];
    for( var i=0; i< width; i++ ){
        rotate_board[i] = new Array( width )
    };
    
    //board 왼쪽으로 회전
    for( var x=0 ; x <width ; x++)
    {
        for( var y=0 ; y <width ; y++)
        {
            rotate_board[x][y] = board[y][width-1-x];
        }
    };
    // 0 제거 및 거꾸로
    rotate_board = rotate_board.map(function( arrs ){
        return arrs.filter(function(arr){ 
            if( arr > 0 ) return arr;
        })
    }).reverse();
    //----여기까지 옆으로 눕히고 0 제거



    var barket = [];
    var bom_cnt = 0;

    for( var i=0 ; i<moves.length ; i++)
    {
       var point = moves[i]-1;
       
       // 배열의 길이가 0인거 통과
       if( rotate_board[point].length ==0 ) continue; 
       
       //인형 뽑아서
       var doll =  rotate_board[  point ][0];
       
       if( barket[barket.length-1]  == doll  ){
           // 이전의 인형과 같으면 ++
           bom_cnt = bom_cnt+2;
           barket.pop();
       }else{
           // 이전의 인형과 다르면 바케스의 저장
          barket.push(  doll );
       }
       
       //인형 뽑기 기계에서 방금 뽑은 맨 앞의 인형 제거
       rotate_board[point].shift();
    }
    
    return bom_cnt;
    

}

다른사람 풀이


 //옆으로 눕히고 0 제거 
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;
};






© 2017. by isme2n