문제

 

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

 

 

 


 

 

1. 정사각형

2. 같은 모양 두 개가 바구니에 쌓이게 되면 터뜨려지면서 바구니에서 사라짐.

3. 바구니 크기 무제한임

4. 게임 화면 -> 2차원 배열 board

- 0부터 시작

5. 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves

6. 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록

 

 

 


 

 

- 바구니 : Stack

- 크레인 이동

- 인형 같으면 빼고

- 사라진 인형

- 사라진 인형 일 때, *2

- 사라진 곳 -> 0으로 채움

- 인형 추가

 


import java.util.Stack;

public class 크레인인형뽑기게임_카카오 {

	public static void main(String[] args) {
		System.out.println(solution(new int[][]{
			{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}},
			new int[]{1,5,3,5,1,2,1,4}));
		

	}
	
	 public static int solution(int[][] board, int[] moves) {
	        int answer = 0;
	        
	        // 바구니
	        Stack<Integer> stack = new Stack<>();
	        
	        // 크레인 이동
	        for(Integer move : moves) {
	            int moveIndex = move - 1; // board는 0부터 시작이라 moves에다가 -1 빼주었음
	            for(int i = 0; i < board.length; i++) {
	                int k = board[i][moveIndex];
	                
	                if(k == 0) continue;
	                
	                if(!stack.empty() && stack.peek() == k) { // 빼고
	                    stack.pop();
	                    answer++;
	                } else {                                 // 넣고
	                    stack.push(k);
	                }
	                
	                board[i][moveIndex] = 0;
	                break;
	            }
	        }
	        
	        return answer * 2;
	    }

}

 

 

 

 

 

 

 

(참고)

- stack