개발공부/코딩테스트 연습문제

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

ku-na 2022. 1. 4. 16:47

문제 설명과 제한 사항

 

 문제를 간단히 설명하면 N x N 형태의 뽑기판을 board[N][N]

크레인의 위치를 moves[] 로 정의할 때,

같은 인형을 연속으로 뽑으면 두 인형이 사라진다.

이때 moves에 따른 사라지는 인형의 갯수를 반환하면 된다.

 

풀이

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        Stack<Integer> box = new Stack<Integer>();
        int answer = 0;
        
        for(int move : moves){
            int height = 0;
            int m = move - 1;
            while(board[height][m] == 0) {
                if(height == board.length-1) break;
                height++;
            }
            if(board[height][m] == 0) continue;
            if(box.empty()) {
                box.push(board[height][m]);
                board[height][m] =0;
            }
            else {
                if(box.peek() == board[height][m]) {
                    box.pop();
                    board[height][m] = 0;
                    answer = answer +2;
                }
                else{
                    box.push(board[height][m]);
                    board[height][m] =0;
                }
            }
        }
        
        return answer;
    }
}

 

++

1. Stack 클래스 사용.

2. moves 갯수만 큼 반복 안에 뽑을 인형의 위치를 찾아 뽑는 과정.

3. for each문에서 조건을 만족했을때 다음으로 넘어가는 방법 continue

    ㄴ 기억이 안나서 break;를 사용 했었다..

4. 과정에서 2차배열에서 높이와 move의 위치를 헷갈려서 반대로 했었다.

5. pop을 하던 push를 하던 인형을 뽑았으면 해당 위치를 0으로 바꿀 생각을 못해서 

  항상 가장 위에 있는 인형을 뽑았었다.

 

여담 : 문제 자체가 장황해서 문제를 읽는게 힘들었다. 알고리즘은 금방 짜게 됐다.