(Java)프로그래머스 - 크레인 인형뽑기 게임

윤준혁·2024년 3월 15일

나의 풀이

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int n = board.length;
        Stack<Integer> stack = new Stack<>(); // 1
        
        for (int i = 0; i < moves.length; i++) {
            int move = moves[i] - 1; // 2
            for (int j = 0; j < n; j++) {
                if (board[j][move] == 0) continue; // 3
                if (board[j][move] != 0) {
                    if (stack.size() > 0 && stack.peek() == board[j][move]) {
                        stack.pop();
                        answer += 2;
                    } else { // 4
                        stack.add(board[j][move]);
                    }
                    board[j][move] = 0;
                    break;
                }
            }
        }
        
        return answer;
    }
}

과정

  1. 순서대로 쌓이고 쌓인 인형은 마지막 것 외에는 신경쓰지않아도 되니 stack을 선언
  2. moves[j]는 1부터 시작하니 -1을 해준 정수 move를 선언
  3. board[j][move]가 0이면 continue. 0이 아니면 stack의 크기가 0보다 크고, stack의 마지막 요소가 현재 board[j][move]와 같다면 스택의 마지막 요소를 삭제하고, answer에 2를 더해준다(마지막 인형과 현재 board[j][move]인형 2개)
  4. 아니면 그냥 넣어주고, 바구니에서 인형을 뺐으니 바구니의 해당 배열의 요소를 0으로 초기화한 후 break;

다른 사람 풀이

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        for (int move : moves) {
            for (int j = 0; j < board.length; j++) {
                if (board[j][move - 1] != 0) {
                    if (stack.isEmpty()) {
                        stack.push(board[j][move - 1]);
                        board[j][move - 1] = 0;
                        break;
                    }
                    if (board[j][move - 1] == stack.peek()) {
                        stack.pop();
                        answer += 2;
                    } else
                        stack.push(board[j][move - 1]);
                    board[j][move - 1] = 0;
                    break;
                }
            }
        }
        return answer;
    }
}
  • stack은 처음 사용해봤는데 isEmpty라는 함수가 있었구나

0개의 댓글