https://programmers.co.kr/learn/courses/30/lessons/64061?language=java
크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)
게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.
import java.util.ArrayList; class Solution { public int solution(int[][] board, int[] moves) { int answer = 0; ArrayList<Integer> basket = new ArrayList<Integer>(); for(int i=0; i<moves.length; i++) { int move = moves[i] - 1; int j = 0; // board의 열을 검사해서 0일경우 계속 반복해서 // 0이 아닌 값을 찾음 while(board[j][move] == 0) { // 만약 board열 전체를 다 돌았는데 모두 0일경우 그대로 반복문을 중단함 if(j >= board.length - 1) { break; } else { j++; } } //열의 마지막 값이 0일 경우 그냥 넘어감 if(board[j][move] == 0) { continue; } else { // 뽑기에서 숫자가 빠져나간 자리는 다시 0으로 채워줌 int temp = board[j][move]; board[j][move] = 0; basket.add(temp); } // 바구니의 사이즈가 2이상일 경우 검사함 if(basket.size() >= 2) { //바구니의 2번째부터 검사를 시작함 for(int k=1; k<basket.size(); k++) { // basket을 가장 앞부터 반복해서 검사한다. // 만약 k번째에 있는 값과 k-1번째의 값이 똑같으면 remove를 실행한다. if(basket.get(k) == basket.get(k - 1)) { basket.remove(k); basket.remove(k - 1); // answer을 증가시킨후 계속 진행 answer += 2; continue; } } } } return answer; }