본문 바로가기
Algorithm Practice/Programmers

[Programmers] 크레인 인형뽑기 게임 (Java)

by 1000zoo 2023. 9. 27.

문제 링크

문제요약

위위 같은 그림이 있을 때, 각 열에 있는 것을 하나씩 올려 오른쪽 칸에 넣었을 때, 만약 같은 캐릭터가 연속되어 들어가게 되면 같은 캐릭터들은 사라지게 된다. 어느 칸을 움직일 지 담겨있는 moves 가 주어질 때, 사라진 인형의 개수를 구하여라.

 

접근 방법

오른쪽에 쌓이는 구조가 Stack 구조 이기 때문에, 매 move 마다 stack에 캐릭터를 담아주고 만약 stack의 가장 위가 집은 캐릭과 같다면, pop을 해준다. 문제 설명에는 아무것도 집지 못하는 경우는 없다고 하여 선택한 열이 비어있는 경우, 그냥 0을 받는 식으로 구현하였는데, 이렇게 하니 몇개의 테스트에서 통과하지 못하였다. 따라서 만약 아무것도 집히지 않아 0을 받는 다면, 아무일도 일어나지 않고 넘어가는 식으로 변경하였다.

 

코드

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        
        for (int move : moves) {
            int doll = pickDoll(board, move - 1);
            if (doll == 0) continue;
            if (stack.empty() || stack.peek() != doll) {
                stack.push(doll);
            } else {
                stack.pop();
                answer += 2;
            }
        }
        
        return answer;
    }
    
    private int pickDoll(int[][] board, int move) {
        for (int i = 0; i < board.length; i++) {
            int temp = board[i][move];
            if (temp != 0) {
                board[i][move] = 0;
                return temp;
            }
        }
        return 0;
    }
}