import java.util.*;
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++) {
int cx = moves[i]-1;
for (int j=0;j<board[cx].length;j++) {
if (board[j][cx] == 0)
continue;
if (!stack.isEmpty() && stack.peek() == board[j][cx]) {
stack.pop();
answer+=2;
} else
stack.push(board[j][cx]);
board[j][cx] = 0;
break;
}
}
return answer;
}
}
🤓단순 구현에 가까운 문제였습니다.
풀이 방법은 아래와 같습니다.
- moves를 for문을 돌리는데 moves를 x축으로 생각하여 board에서 값을 고릅니다. 이 때 board의 값이 0이 아닌 경우에만 체크하도록 로직을 구현합니다.
- 0일 경우 continue로 넘어가주고 아니라면 stack의 값을 확인합니다.
- stack이 비어있지 않고 마지막 값을 확인한 결과 현재 크레인으로 뽑은 값과 같은 경우 해당 stack의 마지막 값을 지워주고 정답값에 2를 더해줍니다. 그 이외에는 stack에 현재 값을 넣어줍니다,
- 크레인으로 값을 뽑았으므로 해당 위치를 0으로 만들어주고 for문을 종료해줍니다.(while문으로 해도 상관 없습니다.)
출처 : 프로그래머스 - 크레인 인형뽑기 게임