Algorithm & SQL/Programmers

[Programmers / Java] 크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십 코테)

김룹 2024. 3. 9. 17:38

 

 

프로그래머스

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

programmers.co.kr

 

 

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        for(int i = 0; i < moves.length; i++) {
            for(int j = 0; j < board.length; j++) {
                if(board[j][moves[i] - 1] > 0) { // 인형이 있을 경우에 뽑기 진행
                	// 스택에 인형이 있고, 현재 뽑은 인형이랑 동일할 경우 터트리기
                    // 아니라면 스택에 인형 넣기
                    if(!stack.isEmpty() && board[j][moves[i] - 1] == stack.peek()) {
                        answer += 2;
                        stack.pop();
                    } else {
                        stack.add(board[j][moves[i] - 1]);
                    }
                    // 인형을 뽑은 자리에 0으로 초기화
                    board[j][moves[i] - 1] = 0;
                    break;
                }
            }
        }
        return answer;
    }
}

 

느낀 점 및 정리 ✍️

1. 스택을 사용하여 뽑은 인형들을 스택에 넣고, 인형을 뽑을 때마다 스택의 가장 최상단의 인형과 일치하는지 확인, 일치한다면 인형 터트리기(answer += 2), stack.pop()

2. 아니라면 스택에 인형 넣는다

3. moves[i] - 1 을 한 이유는, 배열의 인덱스는 0부터 시작인데 크레인의 입력 값은 1부터 시작이기 때문에 크레인의 값에서 -1을 해주어야 인덱스가 맞는다