Coding test

[프로그래머스] 크레인 인형 뽑기 (Level 1) - javascript

Jiwoo 2022. 4. 29. 10:13

문제

게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x 1" 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.
 
문제 더보기
 

나의 풀이

function solution(board, moves) {

    let basket = [];
    let count = 0;

    moves.forEach(e => {

        for(let i = 0; i < board.length; i++) {

            if(board[i][e-1]) {

                let outDoll = board[i][e-1];
                board[i][e-1] = 0;

                if(outDoll === basket[basket.length -1]) {

                    basket.pop();
                    count += 2;
                }

                else basket.push(outDoll);

                break;
        }
    }});
    return count;;
}

 

  • 풀이

    function solution(board, moves) {
        //               0 1 2 3 4
        // 예시 board = 0[0,0,0,0,0]
        //             1[0,0,1,0,3]
        //             2[0,2,5,0,1]
        //             3[4,2,4,4,2]
        //             4[3,5,1,3,1]
    
        //     moves = [1,5,3,5,1,2,1,4]
    
        // moves[i] => board[j][i-1] 중 0이 아닌 값 제거/ 바구니 push
        // 바구니[i] = [i+1] => 둘 다 제거 / i -1
    
        let basket = [];
        let count = 0;
    
        moves.forEach(e => {
    
            for(let i = 0; i < board.length; i++) {
    
                // 맨 위 인형 파악 (0이 아니면 다음 단계)
                if(board[i][e-1]) {
    
                    // 변수: 꺼낸 인형 저장
                    let outDoll = board[i][e-1];
    
                    // 인형을 꺼내줌
                    board[i][e-1] = 0;
    
                    // 꺼낸 인형이 바구니 맨 위 인형과 같다면
                    if(outDoll === basket[basket.length -1]) {
    
                        // 바구니 맨 위 인형 제거
                        basket.pop();
    
                        // 터져서 사라진 인형 개수 +2
                        count += 2;
                    }
    
                    // 인형 중복 아니면 바구니에 넣기
                    else basket.push(outDoll);
    
                    // 하나 꺼냈으면 다음으로 넘어감
                    break;
            }
    
        }});
    
        return count;;
    
    }

     

  • 정확도 테스트 결과