Java/Coding Test

크레인 인형뽑기 게임 문제 풀이

최고다최코딩 2023. 10. 4. 14:04
728x90

정사각형 모양의 틀에 여러 종류의 인형이 있고 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를 수정해준다.