티스토리 뷰

알고리즘 문제를 풀다보면 2차 이상 배열의 탐색을 위해 다중 반복문을 쓰는 경우가 많습니다. 예를들어 아래와 같은 경우입니다.


1
2
3
4
5
6
7
int[][] arr = new int[n][n];
 
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
                
    }
}


간단한 예제로 위의 2차 배열에서 1을 찾았을 경우 전체 반복문을 빠져나오는 코드를 작성해 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
int[][] arr = new int[n][n];
 
boolean flag = false;
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
        if(arr[i][j]==1){
            flag = true;
            break;
        }
    }
    if(flag) break;
}


boolean형 변수 flag를 선언하여 1을 발견했을 시에 flag의 값을 바꿔준 후 안쪽 반복문을 빠져나온 뒤 다시 flag 변수를 확인해서 바깥쪽 반복문의 break 처리를 해주었습니다.


방법이 잘 못 된것은 아니지만 Java에서는 좀 더 편하게 다중 반복문을 빠져나올 수 있는 방법이 있습니다. goto 문을 이용하는 법도 있지만 권장 사항은 아니므로 반복문에 라벨(Label)을 붙여 즉, 반복문에 이름을 부여하여 다중 반복문을 빠져나올 수 있습니다.


위의 예제에서 첫 번째 반복문에 xx란 라벨을 부여해보겠습니다.


1
2
3
4
5
xx:     for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                
            }
        }


첫 반복문 앞쪽에 '(이름):' 을 붙여주면 라벨이 부여되어 이제 저 반복문을 xx로 부를 수 있게됩니다. 그렇다면 이 라벨 붙인걸 어떻게 써먹을 수 있을까요? 마찬가지로 1을 찾을경우 전체 반복문을 빠져나가는 코드를 작성해 보겠습니다.


1
2
3
4
5
xx:     for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(arr[i][j]==1break xx;
            }
        }


아주 간단하게 break xx;를 통해서 '1을 찾았을경우 가장 바깥쪽 반복문인 라벨이 xx를 빠져나가라' 라는 코드를 작성할 수 있습니다. 마찬가지로 다중 반복문에서 안쪽 내용을 무시하고 다시 위로 돌아가고 싶을 경우 continue 문도 이용 가능합니다.


1
2
3
4
5
xx:     for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(arr[i][j]==1continue xx;
            }
        }


위와 같이 continue 문도 정상적으로 작동이 됩니다.


flag 변수를 이용해서 작성하는것도 좋지만 문제를 풀때는 시간적인 문제도 있으므로 이해할 수 있는 범위에서 최대한 간결히 작성하는게 좋다고 생각하므로 앞으로 라벨을 적극적으로 사용할 것 같습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday