크레인 인형뽑기 게임
              
          2023. 9. 4. 16:13ㆍProgrammers/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 |