DEV/알고리즘

[프로그래머스 Lv.1] 크레인 인형뽑기 java

Imvory 2020. 11. 10. 16:52

문제설명

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

 

제한사항

  • board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

 

입출력 예

board moves result
[[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

 

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
 
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
 
        for(int move : moves) {
            for(int i=0; i<board.length; i++) {
                if(board[i][move-1]!=0) {
                    if(!stack.empty() && stack.peek()==board[i][move-1]) {
                        stack.pop();
                        answer+=2;
                    }else {
                        stack.push(board[i][move-1]);
                    }
                    board[i][move-1= 0;
                    break;
                }
            }
        }
        return answer;
    }
}
cs

 

문제풀이 순서

  1. 인형을 담아줄 스택 생성
  2. 크레인이 작동한만큼 반복문 돌리기
  3. 2차원배열의 y축만 검사해야하기때문에 x축은 고정시키고 반복문을 돌려준다.
  4. 바구니에 있는 인형과 칸에 인형을 비교하여 같다면 인형을 없애주고 같지않다면 바구니에 인형을 넣어준다.
  5. 인형이 터질땐 2개가 없어지므로 +2
  6. board[i][move-1] = 0 으로 칸에 있는 인형을 바구니에 넣었거나 사라졌으므로 초기화시켜준다.