크레인 인형 뽑기 게임

김나영·2023년 6월 21일
0

프로그래머스

목록 보기
39/39

문제 : 크레인 인형뽑기 게임

풀이

Stack<Integer> stack = new Stack<>();
  • 바구니의 역할을 해줄 Stack 생성
for (int i = 0; i < moves.length; i++) {
   for (int j = 0; j < board.length; j++) {
  • moves의 길이만큼 for문을 돌림

  • board의 길이만큼 for문을 돌림

    • 해당 라인에서 인형을 뽑아야하기 때문에
if(board[j][moves[i]-1] != 0) {
   if(!stack.isEmpty() && stack.peek() == board[j][moves[i]-1]) {
       stack.pop();
       answer += 2;
  • 만약 board[j][moves - 1]가 0이라면 인형이 없는 것이므로 넘어감

  • 0이 아니라면 stack이 비어있지 않고 stack의 가장 윗 요소가 board[j][moves[i]-1]가 같은지 비교

  • 같다면 stack애 pop을 하여 요소를 반환하고 2만큼 answer애 더해줌

 else  {
    stack.push(board[j][moves[i]-1]);
}    
  • 다르다면 board[j][moves[i]-1]를 push
board[j][moves[i]-1] = 0;
break;
  • 인형을 뽑았으므로 해당 자리의 값을 0으로 초기화

전체 코드

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() && stack.peek() == board[j][moves[i]-1]) {
                        stack.pop();
                        answer += 2;
                    } else  {
                        stack.push(board[j][moves[i]-1]);                 
                    }
                    board[j][moves[i]-1] = 0;
                    break;
                }
            }
        }
        return answer;
    }
}

0개의 댓글