반응형
풀이 >
주어지는 보드판에 0이 아닌 맨 위 블럭을 가져와야 되기 때문에
보드판 세로 한줄씩을 Stack으로 구현 했다(표현이 쉽도록 ArrayList로 구현)
세로줄 스택에서 맨위 요소를 꺼내 뽑은 인형이 저장되어있는 result스택에
맨 위 요소와 같은지 확인 후 삭제(answer+=2) 하거나 인형을 저장했다
import java.util.ArrayList;
import java.util.Stack;
public class ProgrammersKakaoCrane {
public int solution(int[][] board, int[] moves) {
int answer = 0;
ArrayList<Stack<Integer>> stackList = new ArrayList<>();
Stack<Integer> result = new Stack<>();
//맨 위 요소와 비교해야하기 때문에 0으로 값을 하나 넣어줌
result.push(0);
for (int i = 0; i < board.length; i++) {
stackList.add(new Stack<>());
for (int j = board.length - 1; j >= 0; j--)
//0이 아니면서 세로줄의 맨 아래 요소부터 push
if (board[j][i] != 0)
stackList.get(i).push(board[j][i]);
}
// 보드판이 제대로 구현됐는지 확인
// stackList.forEach(System.out::println);
for (int i : moves) {
// moves의 해당 세로줄이 비어있지 않다면
if (!stackList.get(i - 1).isEmpty()) {
//뽑은 인형을 저장하는 스택에 맨 위 요소와
//현재 뽑은인형을 비교해 같으면 삭제후 answer에 2증가
if (result.peek().equals(stackList.get(i - 1).peek())) {
stackList.get(i - 1).pop();
result.pop();
answer += 2;
// 맨 위 요소와 현재 뽑은 인형이 같지않다면 뽑은 인형을 저장
} else
result.add(stackList.get(i - 1).pop());
}
}
// result.forEach(System.out::println);
// System.out.println(answer);
return answer;
}
}
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[JAVA]프로그래머스 - 문자열 내 마음대로 정렬하기 (0) | 2020.12.06 |
---|---|
[JAVA]프로그래머스 - 문자열 내 p와 y의 개수 (0) | 2020.12.05 |
[JAVA]백준 - 11866.요세푸스 문제 0 (0) | 2020.11.23 |
[JAVA]백준 - 1920.수 찾기 (0) | 2020.11.13 |
[JAVA]백준 - 1018.체스판 다시 칠하기 (0) | 2020.11.11 |