코드
public int solution(int[][] board, int[] moves) {
// 1. 바구니에 담겨질 리스트 선언
// 2. 뽑기의 해당 값이 0일 경우 0이 아닌 다음 행의 숫자를 뽑는다.
// 3. 새로운 숫자가 뽑혔을때 바구니의 마지막 숫자와 같으면 소멸 된다.
// 바구니 리스트 선언
ArrayList<Integer> list = new ArrayList<Integer>();
int cnt = 0;
// 기준은 moves
for(int i=0; i<moves.length; i++) {
for(int col=0; col<board.length; col++) { // 행
// 해당 뽑기 값이 0이 아닐경우 바구니에 저장
if(board[col][moves[i]-1] != 0 ) {
// 바구니에 값이 없거나 뽑은 값과 바구니의 마지막 값이 다를 경우 바구니에 저장
if(list.size() == 0 || list.get(list.size()-1) != board[col][moves[i]-1] ) {
list.add(board[col][moves[i]-1]);
board[col][moves[i]-1] = 0;
break;
} else if(list.get(list.size()-1) == board[col][moves[i]-1]) {
list.remove(list.size()-1);
board[col][moves[i]-1] = 0;
cnt++;
break;
}
}
}
}
return cnt*2;
}
public static void main(String[] args) {
Solutaion3 sol = new Solutaion3();
int[][] board = {{0,0,0,0,0},{0,0,1,0,3},{0,2,5,0,1},{4,2,4,4,2},{3,5,1,3,1}};
int[] moves = {1,5,3,5,1,2,1,4};
System.out.println(sol.solution(board, moves));
}
설명
값은 moves의 요소에 따라 쌓이므로 첫번째 for문을 moves기준으로 돌리고,
해당 열의 값이 0일 경우 다음 행으로 증가 시켜야 함으로 col기준으로 for문을 돌린다.
조건1) list에 값이 없거나, 마지막에 들어있는 list의 값이 뽑히는 값과 다를 경우
list에 추가를 하고 해당 배열의 값은 0으로 변경한다.
조건2) 마지막에 들어있는 list의 값이 뽑히는 값과 같을 경우
list에 있는 같은 값을 지우고 해당 배열의 값은 0으로 변경한다.
[프로그래머스][Level1][(월간 코드 챌린지 시즌1)두 개 뽑아서 더하기] (0) | 2021.03.11 |
---|---|
[프로그래머스][Level1][(탐욕법)체육복] (0) | 2021.03.09 |
[프로그래머스][Level1][(해쉬)완주하지 못한 선수] (0) | 2021.03.08 |
[프로그래머스][Level1][(완전탐색)모의고사] (0) | 2021.03.07 |
[프로그래머스][Level1][무슨 요일인가] (0) | 2021.03.07 |