문제풀이/코딩테스트

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

gyungmean 2022. 2. 18. 16:13

문제출처

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

import java.util.Stack;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> bucket = new Stack<Integer>();
        
        for(int m : moves){
            int i = 0;
            while(i < board.length){
                if(board[i][m - 1] != 0) {
                    break;
                }
                if(board[i][m - 1] == 0){
                    i++;
                }
            }
            if(i >= board.length) continue;
            if(bucket.empty() != true){
                if(bucket.peek() != board[i][m - 1]){
                    bucket.push(board[i][m - 1]);
                }
                else{
                    answer++;
                    bucket.pop();
                }
            }
            else{
                bucket.push(board[i][m - 1]);
            }
            board[i][m - 1] = 0;
        }
        return answer * 2;
    }
}

문제를 읽자마자 스택을 이용해야겠다고 생각했다.

 

(알바하면서 틈날때마다 핸드폰 좁은화면으로 프로그래머스를 풀다보니 가독성이 구려지는 코드가 자꾸 나온다ㅠㅠ)

 

주어진 인덱스를 이용해 해당 열에서 0이면 i를 증가시켜 다음을 확인해서 인형 위치를 파악

스택에서 맨 위에 위치한 인형을 보고 같으면 pop해주고 answer를 증가

아니라면 push

그리고 해당 위치는 인형을 꺼냈기 때문에 0으로 변경해준다.

 

그리고 중요한거... 자꾸 틀렸다고 나와서 왜지? 했는데 인형이 터진 횟수가 아니라

터진 인형의 개수가 정답이었다 그래서 answer * 2를 해주었다.