해결된 질문
작성
·
238
0
solution 코드를 아래와 같이 작성했습니다.
public static int solution(int n, int[][] board, int m, int[] moves) {
int answer = 0;
// stack 만들기
List<Stack<Integer>> stacks = new ArrayList<>();
for (int i = 0; i < n; i++) {
Stack<Integer> tmp = new Stack<>();
for (int j = n - 1; j >= 0; j--) {
if (board[j][i] == 0) break;
tmp.push(board[j][i]);
}
stacks.add(tmp);
}
Stack<Integer> bucket = new Stack<>();
for (int i : moves) {
if (!stacks.get(i-1).isEmpty()){
int newItem = stacks.get(i-1).pop();
if (!bucket.isEmpty() && bucket.peek() == newItem) {
bucket.pop();
answer += 2;
} else bucket.push(newItem);
}
}
return answer;
}
board의 상단 인형에 접근하는 방법으로 저는 Stack의 List를 만들어 사용했고, 강사님은 직접 배열에 접근했다는 것이 차이점인 것 같습니다.
위 코드로 채점을 해보면 4번 test case까지는 통과하지만 마지막 5번 test case를 통과하지 못합니다. (리턴 : 22, 답 : 16)
코드의 효율성 문제를 떠나서 위 코드도 제대로 동작해야 될 것 같은데 마지막 케이스만 통과하지 못하는 이유를 도저히 못 찾겠네요ㅜㅜ
혹시 이유를 아시는 분이 계실까요..?ㅜ
답변 1
0
5번 문항 테스트 케이스를 잘 보시면 N번 째 줄의 인형을 쌓을 때 0 0 0 1 2 3 이런 식으로 쌓이는 경우 뿐 아니라 0 1 0 2 3 같은 경우도 있습니다.
if (board[j][i] == 0) break;
처럼 N번 째 줄에 대한 스택을 그만 쌓도록 하면 리턴값이 22 나올 겁니다.