[프로그래머스] 크레인 인형뽑기 게임

최대 1 분 소요

문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/64061





코드

function solution(board, moves) {
    
    //바구니
    let result = [];
    let cnt = 0;

    //moves
    for(let i=0; i<moves.length; i++){
        
        let idx = 0;
        let item = 0;
        
        //뽑기
        for(let j=0; j<board.length; j++){
            if(board[j][moves[i]-1] !== 0){
                item = board[j][moves[i]-1];
                idx = j;
                break;
            } 
        }
        
        if(item === 0) continue;
        
        //바구니에서 비교
        //뽑기한거랑 바구니 맨 위랑 같으면
        if(result.length>=1 && result[result.length-1] === item){
            //맨 위지우고
            result.pop();
            //뽑힌거 삭제
            board[idx][moves[i]-1] = 0;
            //카운트
            cnt+=2;
            continue;
        }
        
         //결과 바구니
         result.push(item);
         
         //뽑힌거 삭제
         board[idx][moves[i]-1] = 0;
        
      }

    return cnt;
}


소감

일단 재밌었다. 푸는데 시간은 꽤 들였지만 생각한대로 나온거같음.





다른 풀이

 function solution(board, moves){
                let answer=0;
                let stack=[];
                moves.forEach(pos => {
                    for(let i=0; i<board.length; i++){
                        if(board[i][pos-1]!==0){
                            let tmp=board[i][pos-1];
                            board[i][pos-1]=0;
                            if(tmp===stack[stack.length-1]){
                                stack.pop();
                                answer+=2;
                            }
                            else stack.push(tmp);
                            break;
                        }
                    }
                });
                                
                return answer;
            }

이 코드가 내 코드랑 효율차이가 얼마나 날지 모르겠지만 일단 코드자체는 상당이 간략해진 것 같다.

나는 continue 를 두 번 사용했는데 사용하면서도 약간 아닌가? 싶기도 했다.
아무튼 푸는 방식은 비슷한듯