기타/Algorithm
[프로그래머스] #lv1 - 크레인 인형뽑기 게임 (Java)
mopil
2023. 1. 12. 15:03
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
# 힌트
스택.
해답 보기
더보기
public static int solution(int[][] board, int[] moves) {
List<Stack<Integer>> mat = new ArrayList<>();
for (int j = 0; j < board[0].length; j++) {
Stack<Integer> temp = new Stack<>();
for (int i = board.length - 1; i >= 0; i--) {
int n = board[i][j];
if (n != 0) temp.add(n);
}
mat.add(temp);
}
Stack<Integer> stack = new Stack<>();
int result = 0;
for (int n : moves) {
// 보드에서 꺼내기
int popped;
try {
popped = mat.get(n - 1).pop();
} catch (Exception ignored) {
continue;
}
// 결과물 스택에 넣기
stack.push(popped);
// 동일한거 터트리기
while (true) {
if (stack.size() <= 1) break;
int a = stack.pop(); // 맨위
int b = stack.pop(); // 아래
if (a != b) {
stack.push(b);
stack.push(a);
break;
}
result += 2;
}
}
System.out.println(stack);
return result;
}
게임 판을 좌우 회전시켜서 스택에 담고, 결과물도 스택에 담는다.
회전시켜서 담을 때, 0은 담지 않도록 별도의 체크를 해줘야한다. (0을 담으면 pop 했을 때 0이 나오는 경우가 생겨버림)
동일한거 터트리는 로직만 잘 생각하면 그렇게 어렵지 않은 구현 문제.
반응형