Algorithm/Java

프로그래머스 - 크레인 인형뽑기 게임 java :: 2019 카카오 개발자 겨울 인턴십 :: 64061

고고마코드 2022. 7. 7. 12:30
반응형

문제 링크

코딩테스트 연습 - 크레인 인형뽑기 게임 | 프로그래머스 스쿨 (programmers.co.kr)


문제 이해하기

  • 2차원배열 board의 값이 0이면 해당 자리는 공백으로 봐야 합니다.
  • 각 인형의 고유의 숫자로 표현되며, 인형을 뽑았으면 해당 인덱스의 값을 0으로 바꿔 공백으로 표현해야 합니다.
  • 특정 공간에 넣었다 뺐다를 반복할 때 가장 좋은 방법은 Stack이라고 생각합니다.

문제 풀이

코드-1

public int solution(int[][] board, int[] moves) {
    int answer = 0, doll = 0;
    Stack<Integer> stack = new Stack<Integer>();

    for(int move : moves) {
        move--; 
        for(int i=0; i<board.length; i++) { 
            doll = board[i][move];
            if(doll > 0) {
                board[i][move] = 0; 
                if(!stack.isEmpty() && doll == stack.peek()) { 
                    stack.pop();
                    answer += 2;
                } else { 
                    stack.push(doll);
                }
                break;
            }
        }
    }

    return answer;
}
  • move--
    우리가 표현하는 인덱스는 0부터 시작인데 문제에서는 1로 표현했으므로 기본적으로 move-1 을 해주어야 합니다.

  • doll = board[i][move];
    인형을 뽑는 부분인데, 0은 공백이니 0보다 큰 경우 인형이 있다고 봐야 합니다.
    인형이 있다면 인형을 뽑고 board[i][move] = 0; 이렇게 0으로 바꿔서 공백으로 표현해야 합니다.

  • if(!stack.isEmpty() && doll == stack.peek())
    핵심이 되는 조건문입니다.
    스택의 마지막 값을 가져와 현재 인형과 같은 인형인지 비교합니다.
    같은 인형이면 stack.pop(); 인형을 빼고, 인형이 2개 터진 것이므로 answer += 2; 2점을 더합니다.

테스트 케이스 처리속도

  • 0.11ms ~ 0.89ms

반응형