알고리즘
[알고리즘] 프로그래머스 크레인 인형뽑기 게임 자바 JAVA 스택
행복하개!
2020. 11. 3. 02:23
일단 인형을 건져올려서 바구니에 담는 것은 쉽다. 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;
}
백준만 풀어보다가 프로그래머스 풀어보는데 뭔가 기분이 좋다. 다른 것도 풀어봐야지!