[프로그래머스 - JAVA] 크레인 인영뽑기

2023. 11. 15. 23:12Algorithm

 

문제 설명


게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
"죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.

 

 

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

 

정답

 

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stk = new Stack<>();
        
        for (int move : moves) {
            for (int i=0; i<board.length; i++) {
                if (board[i][move - 1] != 0) {
                    
                    int last_num = 0;
                    if (!stk.isEmpty()) {
                        last_num = stk.peek();
                    }

                    stk.add(board[i][move - 1]);
                    board[i][move - 1] = 0;

                    if (last_num == stk.peek()) {
                        stk.pop();
                        stk.pop();
                        answer += 2;
                    }

                    break; // 찾으면 끝내야함
                }
            }
        }
        
        return answer;
    }
}

 

이 문제는 보자마자 그냥 스택 이용해서 풀어야겠다는 생각이 들었다 내부 구현 중 결과 찍는 과정에서 값을 하나 실수해서 자꾸 이상한 결과가 나와서 그거 해결하는데 오래 걸리긴 했지만 스택 구조만 잘안다면 어렵지 않은 문제인거 같다.