일단 인형을 건져올려서 바구니에 담는 것은 쉽다. moves의 순서대로 board라는 2차원 배열에 해당 열에만 차례대로 0이 아닌걸 찾아내면 된다. 만약 0이면 바구니에 안담고 넘어가면 끝.
다만 바구니를 Array로 할 것인지, ArrayList로 할 것인지, Stack으로 할 것인지는 기호(?)에 따라 하면 되지만 Stack이 제일 알맞은 것 같다.
리스트로 구현한 코드 :
public static int solution(int[][] board, int[] moves) {
int answer = 0;
List<Integer> basket = new ArrayList<>();
for (int i = 0; i < moves.length; i++) {
int tmp = 0;
int location = moves[i] - 1;
for (int j = 0; j < board.length; j++) {
if (board[j][location] != 0) {
tmp = board[j][location];
board[j][location] = 0;
break;
}
}
if (tmp != 0) {
if ((basket.size() >= 1) && (basket.get(basket.size() - 1) == tmp)) {
basket.remove(basket.size() - 1);
answer += 2;
} else
basket.add(tmp);
}
}
return answer;
}
스택으로 구현한 코드 :
public static int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> basket = new Stack<>();
for (int i = 0; i < moves.length; i++) {
int tmp = 0;
int location = moves[i] - 1;
for (int j = 0; j < board.length; j++) {
if (board[j][location] != 0) {
tmp = board[j][location];
board[j][location] = 0;
break;
}
}
if (tmp != 0) {
if (basket.size() >= 1 && basket.peek() == tmp) {
basket.pop();
answer += 2;
} else
basket.push(tmp);
}
}
return answer;
}
백준만 풀어보다가 프로그래머스 풀어보는데 뭔가 기분이 좋다. 다른 것도 풀어봐야지!
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 완주하지 못한 선수 자바 JAVA 해시 (0) | 2020.11.03 |
---|---|
[알고리즘] 백준 1931 자바 JAVA 그리디 알고리즘 회의실배정 (0) | 2020.11.02 |
[알고리즘] 백준 12865 자바 JAVA 동적프로그래밍 냅색 (0) | 2020.10.31 |
[알고리즘] 백준 11054 자바 JAVA 동적프로그래밍 LIS 최장 증가 수열 (0) | 2020.10.20 |
[알고리즘] 백준 11053 자바 JAVA 동적프로그래밍 LIS 최장 증가 수열 (0) | 2020.10.20 |