Nevertheless

[JAVA] 크레인 인형 뽑기 게임 본문

코딩테스트/Programmers

[JAVA] 크레인 인형 뽑기 게임

hxx_1 2024. 6. 1. 16:25

< 풀이 > 

import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
        Stack<Integer>stack=new Stack<>();
        int answer = 0;
        
        for(int i=0;i<moves.length;i++){
            int num=moves[i]; //작동시킨 위치 
            
            for(int j=0;j<board.length;j++){
                if(board[j][num-1]==0) //값이 0이면 다음 행으로 넘어감
                    continue;
                else{ //값이 0이 아니다 => 인형이 있다. 
                    if(stack.isEmpty()){ //스택이 비어있으면
                        stack.push(board[j][num-1]);
                    }
                    else { //스택이 비어있지 않으면 
                        if(stack.peek()==board[j][num-1]){ //스택 맨 위의 값 == 현재 값   
                            stack.pop(); //스택에서 빼기
                            answer+=2; // 사라진 인형 개수 2개 증가 
                        }
                        else //스택 맨 위의 값 != 현재 값  
                            stack.push(board[j][num-1]); //스택에 넣어주기 
                    }
                    board[j][num-1]=0; // 인형을 뺐으면 0으로 값 변경
                    break; //인형을 빼고 나면 다음 행으로 넘어가지 않기 위해 break 해주기 
                }      
            }
        }

        return answer;
    }
}

 

✏️ 풀이 과정

 

1. moves 배열을 돌며 현재 기계를 작동시킨 위치를 num 변수에 저장한다.

2. board 배열을 열은 num-1로 고정으로, 행을 바꿔가며 반복문을 돈다. 

=> board[j][num-1]의 값이 0이라면 인형이 없다는 뜻이므로 다음 행으로 넘어간다.

=> board[j][num-1]의 값이 0이 아닌 경우 ( 인형이 있음 )

     ① 스택이 비어 있으면 : 스택에 현재 값 넣기

     ② 스택이 비어 있지 않으면

      - 스택 맨 위의 값과 현재 값이 같을 경우 ( 인형 터뜨려짐) : 스택에 들어있는 맨 위의 값 빼기, answer 값 2 증가

        ( 스택에 들어있던 인형 1개와 현재 인형 1개 )

      - 스택 맨 위의 값과 현재 값이 같지 않을 경우: 스택에 현재 값 넣기 

      - 인형을 뺐으므로 현재 값을 0으로 변경, 다음 행으로 넘어가지 않기 위해 break 해주기

3. answer을 return 

       

✍🏻 느낀점 

 

처음에 인형이 있는 경우(값이 0이 아닐 때) stack 에 값을 넣고 break 문을 걸어주지 않아서 계속 같은 열에서 다른 행으로 넘어가서 이상한 값이 나왔다. 이번 문제를 통해 스택도 복습을 하고, 이전보다 스택에 대해 좀 익숙해진 것 같다. 가끔 반복문을 사용할 때, 내가 작성한 반복문이 어떻게 돌아가고 있는지 헷갈릴 때가 있는데 이 점을 늘 유의해야겠다. 

'코딩테스트 > Programmers' 카테고리의 다른 글

[JAVA] 숫자 짝꿍  (0) 2024.06.08
[JAVA] 완주하지 못한 선수  (1) 2024.06.08
[JAVA] 성격 유형 검사하기  (0) 2024.06.01
[JAVA] 바탕화면 정리  (0) 2024.05.27
[JAVA] 개인정보 수집 유효기간  (0) 2024.05.27