[Lv1]크레인 인형뽑기

1634 단어 algorithmjsalgorithm

0.문제설명

NxN 배열에서 moves에 담긴 순서대로 가장 위에 담긴 인형을 basket에 옮긴 후 연속해서 같은 인형이 두개 담길때 사라지는 인형의 갯수를 출력하는 문제이다.

1.풀이

moves 에서 옮기려는 해당열의 가장 위에 있는 즉, [i][j]중 i가 가장 작은 인형을 뽑아서 basket 문자열에 넣어준다. 하나씩 빼서 쓰기 쉽게 가로 단위로 저장되어 있는 board문자열을 세로단위로 result에 object로 저장 해 준다. 그리고 순서에 맞게 basket에 인형을 push 로 저장 한 뒤 두개가 연속하면 지워주면서 count(n)을 2개 씩 증가한 뒤 n을 출력한다.

2.코드

function solution(board, moves) {
    let result = {};
    let basket = [];
    for(let i=1; i<=board.length; i++){
            eval("result.array"+i+"=[]");
        }
    
    for(let j=1;j<=board.length;j++){
        for(let i=1;i<=board.length; i++){
            if(board[i-1][j-1] !== 0){
             eval("result.array"+j).push(board[i-1][j-1]);
            }
        }
    }
    
    for(let i=0; i<moves.length; i++){
        let selectedRow = eval("moves["+i+"]");
        let selectedArray = eval("result.array"+selectedRow);
            if(selectedArray !== null){
                 basket.push(selectedArray[0]);
                selectedArray.splice(0,1);
             }
       
    }
    
    let filterdBasket = basket.filter(n=>n);
     
   let n=0;
    let i=0;
    while(i<filterdBasket.length-1){
        if(filterdBasket[i] === filterdBasket[i+1]){
            filterdBasket.splice(i,2);
            n+=2;
            i=0;
        }else{
            i++;
        }
    }
   
    return n;
}

3.후기

이 문제를 푼지 시간이 조금 지난 상황에서 정리를 하자니 이것 저것 고쳐보고 싶을 것이 있는데, 저 당시에는 arr.pop()을 사용할 줄 몰랐지만, 지금이면 pop을 써서 빠르게 줄여 갔을 듯 하다.

좋은 웹페이지 즐겨찾기