크레인 인형뽑기 게임

2023. 9. 4. 16:13Programmers/Java

문제

 

결과

 

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.*;
 
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<Integer>();
        
        for(int j=0; j<moves.length; j++) {
            int doll = 0;
            
            for(int k=0; k<board.length; k++) {
                if(board[k][moves[j]-1!= 0) {
                    doll = board[k][moves[j]-1]; 
                    board[k][moves[j]-1= 0//뽑았으니 0으로
                    
                    break;
                }
            }
            
            //중복 검사 -> 연속해서 같은 숫자일 때만!! 사라짐
            if(stack.size() != 0 && doll != 0) {
 
                if(stack.peek() == doll) { //이미 뽑힌 인형중에 있는지 검사
                    stack.pop();
                    answer++;
                } else {
                    stack.push(doll); //없다면 moves의 그 값을 add
                }
            
            }else if(stack.size() == 0){
                stack.push(doll);
            }    
        }
        return answer*2;
    }
}
cs

 

문제 설명이 불친절해서 인형이 어떤 형태로 들어있는지 이해가 안 갔는데 

이차원배열이 인덱스가 낮은 순에서 높은 순으로 쌓여있는 상태이다.

 

[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] 순서대로 뽑을 것이다.

 

뽑은 것은 바구니에 모아두는데

바구니를 무엇으로 둘 것인가?

 

처음에는 같은 인형이 뽑히면 터지는 줄 알고 ArrayList를 이용했는데

"연속"한 경우에만 터지는 거였다.

 

그래서 바구니를 Stack으로 설정했다.

 

1. moves의 순서대로 인형을 뽑는다.

2. 뽑은 자리는 이제 인형이 없으니까 0으로 바꾸어준다.

3. 바구니에 인형이 담길 때 가장 위에 있는 인형이 같은 인형인지 스택을 검사한다.

3-1. 같은 인형이라면 스택에서 해당 인형을 꺼내고 answer를 1 추가한다.

3-2. 같은 인형이 아니라면 스택에 담아준다.

4. 마지막 결과낼 때 answer를 두 배처리한다. → 인형이 터질 때 2개씩 터지기 때문이다.

'Programmers > Java' 카테고리의 다른 글

추억 점수  (0) 2024.08.27
마법의 엘리베이터  (0) 2023.08.04
전국 대회 선발 고사  (0) 2023.05.24
x 사이의 개수  (2) 2023.05.17
qr code  (2) 2023.05.13