알고리즘 문제를 풀다보면 중첩 반복문을 사용하는 경우가 있다.
int[][] arr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// code...
}
}
상단의 2차원 배열에서 1
을 찾았을 경우, 중첩 반복문을 빠져나오는 코드를 작성해보자.
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;
}
}
flag 변수를 선언하여 1
을 발견했을 때 flag의 값을 바꿔준 후 안쪽 반복문을 빠져나온 뒤, flag 변수를 확인해서 바깥쪽 반복문의 break
처리를 해준다.
이와 같은 방식을 라벨(label)
을 통해 더 편하게 중첩 반복문을 빠져나올 수 있다.
첫 번째 반복문에 flag란 라벨(label)
을 부여해보자. 첫 번째 반복문 앞쪽에 (라벨명):
을 명시하면 해당 반복문을 부여한 라벨명으로 부를 수 있게된다.
flag:
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (arr[i][j] == 1) {
break flag;
}
}
}
break
문을 통해서 1
을 찾았을 경우, 가장 바깥쪽 반복문인 flag를 빠져나가는 코드를 작성할 수 있습니다. 마찬가지로 중첩 반복문에서 안쪽 내용을 무시하고, 다시 위로 돌아가고 싶을 경우, continue
문도 이용 가능하다.