




나의 풀이
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
int n = board.length;
Stack<Integer> stack = new Stack<>(); // 1
for (int i = 0; i < moves.length; i++) {
int move = moves[i] - 1; // 2
for (int j = 0; j < n; j++) {
if (board[j][move] == 0) continue; // 3
if (board[j][move] != 0) {
if (stack.size() > 0 && stack.peek() == board[j][move]) {
stack.pop();
answer += 2;
} else { // 4
stack.add(board[j][move]);
}
board[j][move] = 0;
break;
}
}
}
return answer;
}
}
과정
- 순서대로 쌓이고 쌓인 인형은 마지막 것 외에는 신경쓰지않아도 되니 stack을 선언
- moves[j]는 1부터 시작하니 -1을 해준 정수 move를 선언
- board[j][move]가 0이면 continue. 0이 아니면 stack의 크기가 0보다 크고, stack의 마지막 요소가 현재 board[j][move]와 같다면 스택의 마지막 요소를 삭제하고, answer에 2를 더해준다(마지막 인형과 현재 board[j][move]인형 2개)
- 아니면 그냥 넣어주고, 바구니에서 인형을 뺐으니 바구니의 해당 배열의 요소를 0으로 초기화한 후 break;
다른 사람 풀이
import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int move : moves) {
for (int j = 0; j < board.length; j++) {
if (board[j][move - 1] != 0) {
if (stack.isEmpty()) {
stack.push(board[j][move - 1]);
board[j][move - 1] = 0;
break;
}
if (board[j][move - 1] == stack.peek()) {
stack.pop();
answer += 2;
} else
stack.push(board[j][move - 1]);
board[j][move - 1] = 0;
break;
}
}
}
return answer;
}
}
- stack은 처음 사용해봤는데 isEmpty라는 함수가 있었구나