인형들이 쌓여 있는 2차원 배열 board가 있고,
크레인이 인형을 뽑는 순서가 들어있는 배열 moves가 주어진다
크레인이 이동할 때마다 해당 열에서 가장 위에 있는 인형을 뽑아서
바구니(stack)에 넣는데,
바구니의 마지막 인형과 같은 인형이 연속으로 쌓이면 터져서 사라져.
터진 인형 개수 × 2가 최종 점수
즉,
이 과정을 반복하는 시뮬레이션 문제
스택(Stack) 을 이용하자.
moves를 하나씩 순회하면서,
제거된 횟수를 세고, 마지막에 2를 곱해 리턴.
| 구분 | 내용 |
|---|---|
| 자료구조 | Stack |
| 시간복잡도 | O(n²) (board 전체 탐색 가능) |
| 공간복잡도 | O(n) |
| 포인트 | 단순 구현 + 스택 응용 |
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
Stack<Integer> basket = new Stack<>();
int removed = 0;
for (int move : moves) {
int col = move - 1; // 1-based → 0-based
for (int row = 0; row < board.length; row++) {
if (board[row][col] != 0) {
int doll = board[row][col];
board[row][col] = 0; // 인형 뽑았으니 0으로 초기화
if (!basket.isEmpty() && basket.peek() == doll) {
basket.pop();
removed += 2;
} else {
basket.push(doll);
}
break;
}
}
}
return removed;
}
}