문제설명:
게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
"죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.
구현코드:
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack <Integer> basket = new Stack<>();
basket.push(0);
for (int move : moves) {
for (int j = 0; j < board.length; j++) {
if (board[j][move - 1] != 0) {
if (basket.peek() == board[j][move - 1]) {
basket.pop();
answer += 2;
} else {
basket.push(board[j][move - 1]);
}
board[j][move - 1] = 0;
break;
}
}
}
return answer;
}
}
문제해석:
이 문제를 풀기위해선 선행선출(FIFO)first in first out stack 을 이용할 수 있는지에 대한 문제라고 생각이 들었다.
문제를 보면 복잡해 보이지만,입출력 예시를 보고 해석하는 게 빠르다
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 |
board 를 나타낸 표이고
4 |
---|
2 |
3 |
1 |
1 |
3 |
4 |
basket 을 나타낸 표이다 즉 11 33 이 지워져 총 4개의 인형이 사라지게 된다.
즉 for 문을 돌려 moves에 1이 들어있다면 [0][0]~[0][4]까지 돌며 0이 아닌 수를 찾아 basket에 넣는 방식이다.그러기 위해선
for문을 0부터 length 까지 즉 배열의 row 만큼 돌리면서 0 이 아닐때 이전 값이랑 비교해서 이전 값이랑 똑같으면 stack 값을 빼내고 사라진 인형개수 +2 아닐경우 stack 에 push 그리고 해당 board 값을 0으로 바꿔준다 . 인형을 뽑았기 때문이다.