[프로그래머스] 크레인 인형뽑기 게임

이한솔·2023년 10월 24일
0

프로그래머스_레벨1

목록 보기
57/65
post-thumbnail

✨️ 문제 설명

: 게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

  -> 자세한 내용 보러가기

🎲 자바 풀이

import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int N = board.length;
        
        Stack<Integer> stack = new Stack<>();
        
        for(int move : moves){
            move--; //인형의 위치는 0부터 시작함
            for(int idx = 0; idx < N; idx++){
                //인형의 위치
                int doll = board[idx][move];
                
                //바구니에 인형이 없거나 꺼냈을 때 다른 인형이면, 바구니에 쌓는다
                if(doll != 0){  //크레인에서 인형을 꺼내야함
                    if(stack.isEmpty() || stack.peek() != doll){
                        stack.push(doll);
                    }else{
                        //같다면 스택에서 없애고 answer +=2
                        stack.pop();
                        answer += 2;
                    }
                
                    //해당 인형 위치에는 더이상 인형이 없다
                    board[idx][move] = 0;
                    break;
                }
            }
        }
        
        
        return answer;
    }
}

풀이 설명

: 각 열에서 크레인의 인형을 뽑아 바구니에 넣고 같을 경우 없애야하므로, Stack으로 풀이하였다.
: 크레인 열 위치는 moves로 주어지는데, 인형의 위치는 0부터 시작하므로 -1을 해준다. 배열을 순회하면서, 인형이 있을 경우 stack이 비어있거나 맨 위의 인형이 서로 맞지 않으면 stack에 쌓고, 같다면 없앤 후 +2를 한다 (인형이 2개 없어지므로). 마지막으로 해당 위치에는 인형이 없어야하므로, 업데이트 후 다음으로 넘어간다.
profile
개인 공부용

0개의 댓글