[프로그래머스 | Javascript] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임

박기영·2022년 9월 13일
0

프로그래머스

목록 보기
42/159

solution

function solution(board, moves) {
    // 바구니
    let stack = [];
    
    // 터뜨려서 사라진 인형의 개수
    let count = 0;
    
    outer:for(let i = 0; i < moves.length; i++){
        // 크레인의 위치
        // 0번 인덱스가 크레인이 1일 때이므로 연산 진행시 주의!
        // 2차원 배열인 board[i][j]에서 j에 해당하는 위치를 결정하는 것이기도 하다.
        let crane = moves[i];
    
        inner:for(let j = 0; j < board.length; j++){
            // 인형이 선택되는 위치
            let doll = board[j][crane - 1];
        
            // 0이 나온다면 더 아래로 들어가야한다.
            // 즉, j를 증가시켜야하므로 continue
            if(doll === 0){
                continue inner;
            } else {
                // 크레인으로 잡아올린 인형을 바구니에 넣는다.
                stack.push(doll);
            
                // 인형이 사라졌으므로, 0을 넣어준다.
                board[j][crane - 1] = 0;
            
                // 크레인으로 넣어준 doll(stack[stack.length - 1])과
                // stack 가장 윗 부분에 있었던 doll(stack[stack.length - 2])이 같다면
                // 두 개를 터뜨려준다.(삭제한다)
                if(stack.length > 1){
                    if(stack[stack.length - 2] === stack[stack.length - 1]){
                        stack.pop();
                        stack.pop();
                    
                        // 인형이 두 개 연속으로 올 때만 삭제되므로
                        // 2를 증가시킨다.
                        count += 2;
                    }
                }
                
                // 인형을 뽑아서 크레인으로 옮겼으므로
                // 다음 크레인 동작을 준비한다
                break inner;
            }
        }
    }
    
    return count;
}

40분 정도 걸려서 풀었다.
문제 예시부터가 스택 구조를 이용하라는 강한 뉘앙스를 풍긴다.
이건 주석을 따라 읽어나가면 이해가 편할 것이다.

다른 분 풀이 중 가장 유명했던 것이, 2차원 배열의 열과 행을 바꿔서 어찌저찌 푸는 것이었는데,
도저히 이해가 안되서 가져오는 것은 그만두었다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN