move 배열을 순회하면서 인형을 고름
❗️행과 열 정확하게 구분해야 함
❗️해당 배열 값이 0 = 인형이 없음 ➡️ 다시 고르기
고른 인형 toy를 스택에 넣기
❗️스택의 top 요소가 toy와 같다면 상쇄되어 사라짐 ➡️ 두 개가 사라지므로 최종 리턴값에 2를 더해줌
❗️배열에 인형이 없어서 인형을 고르지 못한 경우(toy = -1) 스택에 넣지 않음
import java.util.Stack;
public class ToyCrane {
public int solution(int[][] board, int[] moves) {
Stack<Integer> stack = new Stack<>();
int result = 0;
for (int m : moves) {
int toy = pickToy(board, m);
if (!stack.isEmpty() && stack.peek() == toy) {
stack.pop();
result += 2;
}
else if (toy != -1) stack.push(toy);
}
return result;
}
private int pickToy(int[][] board, int m) {
for (int i = 0; i < board.length; i++) {
if (board[i][m - 1] != 0) {
int tmp = board[i][m - 1];
board[i][m - 1] = 0;
return tmp;
}
}
return -1;
}
public static void main(String[] args) {
ToyCrane toyCrane = new ToyCrane();
int[][] board = new int[][]{
{0,0,0,0,0},
{0,0,1,0,3},
{0,2,5,0,1},
{4,2,4,4,2},
{3,5,1,3,1}
};
int[] moves = new int[]{1,5,3,5,1,2,1,4};
System.out.println(toyCrane.solution(board, moves)); // 4
}
}