크레인 인형뽑기 게임 문제 풀이
정사각형 모양의 틀에 여러 종류의 인형이 있고 1~5번 라인 중 몇번으로 이동해서 인형을 가져오는지 moves를 배열로 주어주면 인형을 가져와서 바구니에 담는다.
이때 바구니의 맨 윗 인형과 내가 가져온 인형이 같은 종류라면 인형들을 없애고 없어진 인형의 수만큼 점수로 획득한다.
public int solution(int[][] board, int[] moves) {
int answer = 0;
Map<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
for (int i = board.length - 1; i >= 0; i--) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] == 0)
continue;
ArrayList<Integer> temp = map.getOrDefault(j, new ArrayList<Integer>());
temp.add(board[i][j]);
map.put(j, temp);
}
}
ArrayList<Integer> stack = new ArrayList<>();
for (int i = 0; i < moves.length; i++) {
if (map.get(moves[i] - 1).size() != 0) {
ArrayList<Integer> temp = map.get(moves[i] - 1);
if (stack.size() > 0 && stack.get(stack.size() - 1) == temp.get(temp.size() - 1)) {
answer += 2;
stack.remove(stack.size() - 1);
} else {
stack.add(temp.get(temp.size() - 1));
}
temp.remove(temp.size() - 1);
map.put(moves[i] - 1, temp);
}
}
return answer;
}
1~5열까지 ArrayList를 각각 가지고 ArrayList에는 각 열에 담긴 인형들의 종류를 int로 가지고 있다.
stack은 뽑은 인형을 담는 바구니이다.
인형을 뽑아 stack의 윗 부분을 확인해서 같으면 stack의 윗부분을 없애고 점수를 2점 얻는다
그리고 인형을 뽑을 때마다 map에서 ArrayList를 수정해준다.