programmers.co.kr/learn/courses/30/lessons/64061
Java
List로 작성한 코드
import java.util.ArrayList;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0; //사라진 인형 수
ArrayList<Integer> list = new ArrayList<>(); //list 생성
//for문으로 제일 위에 있는 값(뽑을 인형)을 list에 저장
for(int i = 0; i < moves.length; i++) {
int num = 0;
for(int j = 0; j <board.length; j++) {
num = board[j][moves[i]-1];
if(num != 0) {
list.add(num);
board[j][moves[i]-1] = 0;
break;
}
}
}
for(int i = 0; i < list.size(); i++) {
if(i != list.size()-1) {
int cur = list.get(i);
int next = list.get(i + 1);
//연속된 같은 값이 존재하면 answer에 2 추가하고 해당 인덱스값(2개) 삭제
if(cur == next) {
answer += 2;
list.remove(i);
list.remove(i);
i = -1;
}
}
}
return answer;
}
}
Stack으로 작성한 코드
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Solution {
public static int solution(int[][] board, int[] moves) {
int answer = 0;
// 배열 재정리
List<Stack<Integer>> new_board = new ArrayList<>();
for (int i=0; i<board.length; ++i) {
Stack<Integer> stack = new Stack<>();
for (int j=board.length-1; j>=0; --j) {
if (board[j][i] != 0)
stack.push(board[j][i]);
}
new_board.add(stack);
}
// simulate
Stack<Integer> bucket = new Stack<Integer>();
for (int i=0; i<moves.length; ++i) {
answer += _step(new_board, moves[i], bucket);
}
return answer;
}
private static int _step(List<Stack<Integer>> new_board, int move, Stack<Integer> bucket) {
move -= 1;
// pick one
Stack<Integer> stack = new_board.get(move);
if (stack.empty()) {
return 0;
}
int picked = stack.pop();
// put
// empty bucket or not matched
if (bucket.empty() || picked != bucket.peek()) {
bucket.push(picked);
return 0;
} else {
bucket.pop();
return 2;
}
}
}
오늘 Stack 배웠다.. 잘 정리해야지
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 나누어 떨어지는 숫자 배열 (0) | 2020.10.03 |
---|---|
[Programmers] 같은 숫자는 싫어 (0) | 2020.10.02 |
[Programmers] 가운데 글자 가져오기 (0) | 2020.09.30 |
[Programmers] 모의고사 (0) | 2020.09.27 |
[Programmers] 두 개 뽑아서 더하기 (0) | 2020.09.27 |
댓글