개발/코딩

[프로그래밍] 프로그래머스 예제문제 풀어보기 <크레인인형뽑기> (실패 -> 성공)

mabb 2022. 3. 24. 22:13
반응형

1,2번 테스트가 계속해서 실패한다.
캐치하지 못한 어떤 예외상황이 있는건지 감이 오질 않는다.
단순한 문제라고 생각했으나 생각보다 골머리를 쓰고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.ArrayList;
 
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        ArrayList<Integer> basket = new ArrayList<>();
        
        for(int crain:moves){
            int moveCrain = crain -1;
            for(int i = 0 ; i < board.length ; i ++){
                if(board[i][moveCrain]!=0){
                    basket.add(board[i][moveCrain]);
                    board[i][moveCrain] = 0;
                    break;
                }                
            }
        }
 
    
        for(int j=0 ; j<basket.size()-1 ; j++){
            if(basket.get(j)==basket.get(j+1)){
                
                answer += 2;
                basket.remove(j);
                basket.remove(j);
                j=0;
              
            }
        }
 
        return answer;
           
}
}
cs

 

문제의 코드~

       

문제의 코드~ 

for(int j=0 ; j<basket.size()-1 ; j++){
            if(basket.get(j)==basket.get(j+1)){              
                answer += 2;
                basket.remove(j);
                basket.remove(j);
               
                j=0;     /// 여기가 문제!
                 System.out.println(j);
              
            }
        }

출처: 프로그래머스 실행결과

 

basket 배열의 사이즈로 for문의 반복횟수를 정하였기 때문에
중간에 배열을 remove 하는 경우 재검토를 빠짐 없이 하기 위하여
j를 0으로 초기화 하였었음.
for문 루프안에서 j가 0으로 초기화 되면 당연히
for문은 j가 0인 경우부터 다시 시작할 것이라고 생각하였으나
for문 안에서 j를 0으로 초기화하였는데 j는 1부터 시작을 하였음.
j를 -1로 초기화 해주니 비로소 j를 0부터 다시 반복하기 시작함.

for문의 구조 자체가 for문의 루프에서 조건식으로 이동할 때
증감식에서 +를 해주는 것인가보다.

 

 

반응형