본문 바로가기

코딩테스트

[코딩테스트] label을 이용하여 다중 반복문 탈출하기

백준 2309번 일곱난쟁이 문제를 풀면서 이중 for문을 빠져나오게 코드를 작성해야하는 일이 있었다.

 

2중 for문 또는 다중 for문을 사용할 때, 안쪽에있는 for문에서 조건에 부합할 때 한번에 상위 for문까지 빠져나오는 법에 대해 머리를 굴려보다 찾아낸 기능이 바로 label이었다.

 

그래서 오늘은 label에 대해서 소개하고자한다.

 

Label이란

label은 앞서 말한 것과 같이 다중 for문을 사용할 때 안쪽 for문에서 전체 루프를 즉시 종료하거나 다음의 큰 반복문으로 이동할 때 사용할 수 있다.

 

코드 예제 

* 기본형태

outerLoop: // 외부 루프에 레이블 지정
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        if (i * j > 50) {
            break outerLoop; // outerLoop 레이블이 지정된 반복문을 탈출
        }
    }
}

 

* 백준 2309번 일곱난쟁이 풀이코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> numList = new ArrayList();
        int sum = 0;
        int minus = 0;
        for (int i = 0; i < 9; i++) {
            int num = sc.nextInt();
            numList.add(num);
            sum += num;
        }

        Collections.sort(numList);
        minus = sum - 100;
        outer:
        for (int i = 0; i < 9; i++) {
            for (int j = i + 1; j < 9; j++) {
                if (numList.get(i) + numList.get(j) == minus) {
                    Integer num1 = numList.get(i);
                    Integer num2 = numList.get(j);

                    numList.remove(numList.indexOf(num1));
                    numList.remove(numList.indexOf(num2));

                    break outer;
                }
            }
        }

        for (Integer integer : numList) {
            System.out.println(integer);
        }
    }
}