본문 바로가기
프로그래밍 언어/C 언어

[C] 중첩 for문 (한번에) 빠져나오기

by 까망 하르방 2021. 3. 19.
반응형

 

이중 for문을 구현하다보면 내부 for문에서 한번에 빠져나오고 싶은 경우가 있습니다.

break문은 현재 소속된 for문에서 빠져나오기 때문에 아래 3가지 정도의 테크닉을 통해 구현할 수 있습니다.

 

① "flag" 변수와 같은 별도 변수를 통한 처리

(구현 내용에 따라 증감되는 변수의 조건을 이용할 수도 있습니다.)

#include <stdio.h>

int main() {
    int cnt = 0;
    while (true) {
        while (true) {
            if (cnt >= 10) break;
            cnt++;
        }
        if (cnt >= 10) break;
    }
}

 

 

② 외부 for문이 끝나는 조건을 내부 for문이 끝날 때 동시에 설정하기

※ for문인 경우, 바깥쪽에서 별도 변수나 if문 처리를 하지 않기 때문에 권장

#include <stdio.h>
int main() {
    int cnt = 0;
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
            if (cnt >= 10) {
                i = 10;
                break;
            }
            cnt++;
        }
    }
}

 

 

③ goto문 사용

- 이동되는 지점 명칭은 임의로 설정하시면 됩니다.

- goto문의 위치에 따라 재귀적으로도 구현할 수 있습니다.

  (무한 loop에 빠지지 않도록 주의)

#include <stdio.h>
int main() {    
    int x, y;
    for (x = 0; x < 10; x++) {
        for (y = 0; y < 10; y++) {
            if (y > 5) goto point;
        }
    }
    printf("1....%d\n", x);
    printf("2....%d\n", y);
    
point:

    printf("3....%d\n", x);
    printf("4....%d\n", y);
}

- goto되는 시점인 x = 0, y = 6 에서 for문이 끝나는 것을 확인하였습니다.

- goto문을 통해서 아래 printf() 2개만 동작하는 것을 확인하였습니다.

(문법이 익숙하지 않은 경우에는 추천하지 않습니다.)

 

이상으로 중첩 for문을 한번에 빠져나오는 방법을 소개드렸습니다.

시간 복잡도를 위해서 중간에 모든 for문을 빠져나오게 하려는 의도지만

경우에 따라서는 의도치 않은 결과를 가져올 수 있기 때문에 주의해야 합니다.

 

 

 

 

반응형

댓글