코딩테스트

[프로그래머스/Java] 크레인 인형뽑기 게임 (Stack 개념+이중배열)

데메즈 2026. 7. 8. 22:53
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

★스택(Stack)이란? ★

후입선출(LIFO : Last In, First Out)

 

import java.util.Stack;

Stack<Integer> basket = new Stack<>(); // 스택 바구니 생성

 

1. 데이터 넣기 : push(값)

스택의 맨 위에 데이터를 넣는다

basket.push(1);
basket.push(2); // 바구니 상태 : [1, 2] (2가 맨 위)

 

2. 맨 위의 데이터 꺼내서 삭제하기 : pop()

int topElement = basket.pop(); // 맨 위에 있던 2를 꺼냄
// 바구니 상태 : [1]

 

3. 맨 위의 데이터 '확인만' 하기 : peek()

방금 뽑은 인형이 바구니 맨 위의 인형이랑 같은 종류인지 비교할때

int topValue = basket.peek(); // 현재 맨 위인 1을 확인함 (삭제X)

 

4. 바구니가 비어있는지 확인 : isEmpty()

아무것도 없을때 : true, 들어있으면 false

비어있을때 peek()이나 pop() 호출하면 에러

if(!basket.isEmpty()){
	// 바구니가 비어있지 않을 때만 맨 위 확인
	int top = basket.peek();
}

 

★2차원 배열 크기 구하기

int rowCount = board.length; // 세로 크기 (행의 개수)
int colCount = board[0].length; // 가로 크기 (열의 개수)

 

내 풀이

★moves에 들어있는 값은 1부터 시작해서 인덱스로 접근할때 1빼주기!!!  ★

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> basket = new Stack<>();
        
        for(int num : moves){
            for(int i=0; i < board.length; i++){
                int item = board[i][num-1];
                if(item != 0){ // 인형이 있을 때
                    board[i][num-1] = 0;
                    if(!basket.isEmpty() && item == basket.peek()){ // 바구니가 비어있지 않으면
                        basket.pop();
                        answer += 2;
                    } else {
                        basket.push(item);
                    }
                    break;
                }
            }
        }
        
        return answer;
    }
}
반응형