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

skyblue·2023년 4월 16일
0

코딩테스트

목록 보기
3/4

풀이

  • cnt: 터진 인형 카운트

  • basket: 바구니에 쌓이는 인형 리스트

  • boardArr: 각 열에 쌓인 인형 리스트

  • moves 순회를 돌며, 인형이 있을 경우, 같은 인형이 연속하지 않으면 바구니에 추가, 연속하면 바구니 맨 위의 인형을 제거하고, 터진 인형 2개를 카운트

function solution(board, moves) {
    const basket = []
    let cnt = 0
    const boardArr = Array.from({length:board.length}, () => [])
    board.forEach(arr => {
        arr.forEach((v, i) => {
            if (v !== 0) boardArr[i].push(v)
        })
    })
    moves.forEach(v => {
        if (boardArr[v-1].length) {
            const shift = boardArr[v-1].shift()
            if (basket[basket.length-1] === shift) {
                basket.pop()
                cnt += 2
            } else {
                basket.push(shift)
            }
        }
    })
    
    return cnt;
}

새로 알게된 내용

const arr = Array(2).fill([]) // [[], []]
arr[0][0] = 1 // [[1], [1]]

arr[0] 값과 arr[1] 값의 주소가 같은가 보다.

틀린 이유 분석

처음에 설명을 잘못 이해하여 헤멨다. board의 각 값(배열)이 한 열인 줄 알았는데, 한 줄로 쌓이는 거였다. 이는 '입출력 예'의 입력과 그림과 비교하며 체크했으면 알 수 있는 사실이었으나, 그러지 않았기에 놓친 내용이었다. 시간을 절약하고, 실수를 줄이기 위해 먼저 문제를 정확히 이해해야 한다.

0개의 댓글