본문 바로가기
Programmers

[Java] 프로그래머스 : 크레인 인형뽑기 게임(Stack 사용)

by 엘딘 2022. 6. 27.

https://programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

 

Stack 

바구니를 Stack으로 사용하여 늦게 들어간 인형끼리 비교하여 같을 시 Count++하고 제거할 수 있도록 설정

 

 

 

 

문제

 

* 좌측 상단부터 (0,0)으로 아래, 오른쪽으로 갈수록 숫자가 커진다. 

* for문에서 board의 길이와 moves의 길이 순서는 상관없음

* board[j][moves[i] -1]

   - [행][열] : 행은 board.length, 열은 moves의 값(몇번째 열)

   - moves[i]-1을 해주는 이유는 배열은 0부터 시작하여 0열부터 시작하는데 moves의 값을 보면 1부터 시작하므로

      -1을 해주어 0부터 시작하도록 설정

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {

        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        
        for(int i = 0; i < moves.length; i++){
            for(int j = 0; j < board.length; j++){
            	// 선택한 칸이 비어있지 않다면
                if(board[j][moves[i]-1] != 0){
                	// stack 마지막에 넣은 값이 비어있지않고 크레인이 뽑은 값과 같다면
                    if(!stack.empty() && stack.peek() == board[j][moves[i]-1]){
                    	// 사라지는 인형은 2개이므로 +=2
                        answer += 2;
                        // stack 마지막 값을 지워주고, 크레인이 뽑은 값도 지워줌
                        stack.pop();
                        board[j][moves[i]-1] = 0;
                        break;
                    // 값이 같지 않다면
                    }else{
                    	// stack 마지막값으로 넣어주고 board에서 크레인으로 뽑은 값은 0으로 처리해준다
                        stack.push(board[j][moves[i]-1]);
                        board[j][moves[i]-1] = 0;
                        break;
                    }
                }
            }
        }
        return answer;
    }
}

 

 

 

 

 

 

 

 

댓글