크레인 인형 뽑기

이리·2025년 4월 16일
0
post-thumbnail

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

문제설명

  • 파라미터: int[][] board, int[] moves
  • 반환값: int
  • 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return

풀이방식

  1. 각 줄마다 Stack을 적용해 거꾸로 인형을 넣어준다.
  2. moves를 토대로 꺼내면서 answerStack의 peek와 비해한다.
    • 같다면 answerStack에서 뽑아주고 answer += 2를 진행한다.
    • 다르다면 해당 인형을 answerStack에 추가한다.

코드

import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int len = board.length;
        List<Stack<Integer>> list = new ArrayList<>(); // 0부터 시작
        Stack<Integer> store = new Stack<>();
        int answer = 0;
        
        for(int i = 0; i < len; i++){
            list.add(new Stack<>());
        }
        
        // 각 스택에 인형 넣기 
        for(int i = len -1 ; i > -1; i--){
            for(int j = 0; j < len; j++){
                if(board[i][j] != 0) list.get(j).push(board[i][j]);
            }
        }
        
        // moves 돌며 하나씩 answerStack peek와 비교하기 
        for(int i : moves){
            int curIdx = i-1;
            if(list.get(curIdx).size() == 0) continue;
            
            int curItem = list.get(curIdx).pop();
            if(store.isEmpty()) store.push(curItem);
            else{
                int peekItem = store.peek();
                if(peekItem == curItem){
                    answer += 2;
                    store.pop();
                }else{
                    store.push(curItem);
                }
            }
        }
        
        return answer;
    }
}

0개의 댓글