강의로 돌아가기
똑깥이썼는데안돼

break를 왜 쓰는지 이해가 가지 않습니다.

자바에서 break는 반복문을 탈출 하기 위해 사용되는 것으로 알고 있습니다.

아래 코드의 경우에는 2중 for문이기 때문에 break문을 사용하는 경우 2중 for문을 전체 탈출 하는 것이 아니라

좀 더 안쪽에 있는 for문만 탈출하는 것으로 알고 있습니다.

break문을 왜 써야만 하는지 반례나 상황을 알려주시면 감사하겠습니다.

작성중인 코드―Solution.java
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
import java.util.ArrayList;
import java.util.List;
class Solution {
     public int solution(int[][] board, int[] moves) {
        int cnt = 0;
        List<Integer> nums = new ArrayList<Integer>();

        for(int i=0;i<moves.length;i++){
            for(int j=0;j<board.length;j++){
                if(board[j][moves[i]-1]!=0){
                    nums.add(board[j][moves[i]-1]);
                    board[j][moves[i]-1]=0;
                    if(nums.size()>=2 && nums.get(nums.size()-1)==nums.get(nums.size()-2)){
                        nums.remove(nums.size()-1);
                        nums.remove(nums.size()-1);
                        cnt+=2;
                    }
                    break;
                }

            }

        }

        return cnt;
    }

}
1 개의 답변
rha6780

break로 탈출하는 for문의 역할이 보드의 가로줄(높이)을 한번씩 탐색하는 역할이잖아요.
그래서 왼쪽 위부터 0으로 두고 가장 마지막 줄인 N(board.length)까지 탐색을 하게 되는데, 여기서 저희가 필요한 것은 moves에 속한 세로 줄에서 '가장 위에 있는 인형'을 뽑아가기 때문입니다.
뽑아간 이후로 break를 하지 않으면 뽑아간 인형 아래도 탐색해서 가져가기 때문에 moves[i]-1 에 해당하는 세로줄은 전부 바구니로 옮겨지기 때문에 해당 for문에서 탈출합니다...!

  • 똑깥이썼는데안돼

    break문이 없는 경우 j행이 증가하면서 세로줄을 인형을 없앤다. → board[j][moves[i]-1]=0; 반복된다는 말씀이신 것 같습니다. 감사합니다. 정말 코테강사들이 "수박에 겉핥기"로 설명해서요ㅠ

    똑깥이썼는데안돼―2022.12.22 15:06
  • rha6780

    오 맞습니다! ㅎㅎ 해피 코딩 하세요!!

    rha6780―2022.12.28 15:47
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.