멍두의 개발새발

[프로그래머스] 크레인 인형뽑기 게임 in Java 본문

Algorithm/Programmers

[프로그래머스] 크레인 인형뽑기 게임 in Java

멍두 2024. 6. 28. 00:49
반응형

📍 문제

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📍 문제설명

인형을 뽑고 stack에 쌓은 뒤 stack에 연속으로 같은 인형이 있으면 인형이 터지고, 터진 인형 수를 합하는 문제이다.

대놓고 stack문제이다.

📍 코드

  1. 인형을 꺼낸다. 가로 좌표는 고정 + 세로 좌표만 이동, 끝까지 0이면 꺼낼 인형이 없으므로 for문 종료
  2. 꺼낸 인형 값과 스택에 쌓인 값을 비교한다. 동일하다면 꺼낸 인형을 스택에 쌓지 않고 기존 stack값만 꺼낸뒤 점수를 더한다. 이 인형은 사용했으므로 for문 종료
  3. 겹치지 않으면 인형을 stack에 쌓는다.
  4.  moves가 끝날 때 까지 반복한다.

✔️ 코드

더보기
import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int n = board.length;
        
        Stack<Integer> stack = new Stack<>();
        
        for(int i = 0; i < moves.length; i++){
            //1. 인형을 꺼낸다
            int y = moves[i] - 1;
            int doll = -1;
            for(int x = 0; x < n; x++){
                if(board[x][y] != 0){
                    doll = board[x][y];
                    board[x][y] = 0;
                    break;
                }
            }
            if(doll == -1){
                continue;
            }
    
            //2. 값이 겹치는 지 검사한다
            if(!stack.empty() && doll == stack.peek()){
                answer+=2;
                stack.pop();
                continue;
            }
            
            //3. 값이 겹치지 않으면 stack에 쌓는다
            stack.push(doll);
        }
        
        return answer;
    }
}

 

 

📍 기억할 것

stack문제는 empty할 때 값을 검사하지 않도록 주의해야한다

 

반응형