본문 바로가기
카테고리 없음

반복문2 (중첩 반복문, 반복문의 중지)

by 낭만 코딩 2024. 8. 13.

1. 중첩 반복문

2. 반복문의 중지

 

 

1. 중첩 반복문

중첩 반복문은 반복문 블록(중괄호) 안에 또 다른 반복문이 존재하는 경우입니다. 중첩 반복문 역시 중첩 if 문과 같이 2, 3중 이상 중첩될 수 있기 때문에, 어렵게 느껴 질 수 있습니다. 특히 반복문이 중첩되는 경우 프로그램의 실행 순서에 대한 이해가 어려울 수 있으니 반드시 예제를 통한 반복학습을 통해 이해하고 넘어가도록 하세요.

중첩 반복문은 처음에는 조금 어렵게 느껴지기 때문에, 모든 사람들이 완벽하게 이해하고 있는 구구단을 통해서 먼저 한단계씩 이해하고 나서 예제를 보도록 하겠습니다. 구구단의 출력 형태를 살펴볼까요.

 

2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
...
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
...
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
...
4 * 9 = 36
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
...
9 * 9 = 81

 

위 표는 2단부터 3단, 4단 그리고 마지막 9단까지의 출력 형태를 표현한 것입니다. 이렇게 출력이 되도록 프로그램을 구현해야 하는데, 우리는 for 문을 이용해서 2단부터 9단까지 하나 하나 전부 출력하는 것이 아니라, 반복문을 사용해서 한번에 출력하도록 프로그래밍 해야 합니다. 출력해야 하는 형태를 살펴보면, 반복의 패턴이 있는것을 알 수 있는데, 먼저 2단을 살펴보면, 두번째 숫자(곱하는 값)1부터 9까지 1씩 증가하면서 반복되고, 세번째 숫자(곱한 값)는 두번째 숫자에서 2를 곱한 값으로 출력되고 있다.

 

2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
...
2 * 9 = 18

 

위 2단을 살펴보면 빨간색 숫자들이 변하는 값들이고 모두 규칙대로 증가하고 있습니다. 이 규칙을 변수와 함께 출력문을 생각해 보면

"2 * " +  변수1 + " = " + 변수2

 

가 됩니다. 변수(변하는 수)는 값이 규칙적으로 변하겠죠? 변수1은 1부터 9까지 1씩 증가하면 되고, 변수2는 변수1에 2를 곱해주면 2단 출력이 완성됩니다.

 

public class Gugu2Dan {

	public static void main(String[] args) {
		for (int i=1; i<=9; i++) {
			System.out.println("2 * " + i + " = " + 2 * i);
		}
	}

}

 

실행 결과

2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

 

이제 2부터 9까지의 단수에 해당되는 숫자가 또 다른 변수(j)로 반복이 되게 만들어 보겠습니다. 중첩 반복문은 처음에 조금 복잡해 보이지만, 천천히 이해될 때까지 반복적으로 다시 봐야 합니다. 단수의 반복 변수 j2일때, 각 단의 곱하는 값 i 변수는 1에서 9로 반복되고, 다시 j3이 되면 또 다시 i1에서 9로 반복 됩니다. 즉 각 단별로 i1~9로 반복되는 것입니다.

 

public class GuguDan {

	public static void main(String[] args) {
		
		for (int j=2; j<10; j++) {
			for (int i=1; i<10; i++) {
				System.out.println("j = "+j+", i = "+i);
			}
		}
		
	}

}

 

실행 결과

j = 2 , i = 1
j = 2 , i = 2
j = 2 , i = 3
j = 2 , i = 4
j = 2 , i = 5
j = 2 , i = 6
j = 2 , i = 7
j = 2 , i = 8
j = 2 , i = 9
j = 3 , i = 1
j = 3 , i = 2
j = 3 , i = 3
j = 3 , i = 4
j = 3 , i = 5
j = 3 , i = 6
j = 3 , i = 7
j = 3 , i = 8
j = 3 , i = 9
... (생략)
j = 9 , i = 1
j = 9 , i = 2
j = 9 , i = 3
j = 9 , i = 4
j = 9 , i = 5
j = 9 , i = 6
j = 9 , i = 7
j = 9 , i = 8
j = 9 , i = 9

 

실행 결과를 살펴보면 처음에 i2,3,4...9로 변할 때 j는 계속 2이고, j의 다음 반복에서 3이 되면 다시 i2,3,4...9로 반복됩니다. 이제 제대로 된 구구단을 출력해보도록 하겠습니다.

 

public class GuguDan2 {

	public static void main(String[] args) {
		
		for (int j=2; j<10; j++) {
			System.out.println("["+j+"단]");
			for (int i=1; i<10; i++) {
				System.out.println(j + " * " + i + " = " + j*i);
			}
		}
		
	}

}

 

실행 결과

[2단]
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
[3단]
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
... (생략)
[9단]
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

 

 

 

2. 반복문의 중지

반복문이 실행되는 도중 특정 조건에 따라 반복이 중지되도록 해야되는 경우가 발생하는 경우가 있는데, 이때 breakcontinue 라는 키워드를 사용합니다.

break문은 이름 그대로 반복문을 아예 중지할때 사용합니다. 자동차 운전중에 브레이크를 밟으면 멈추는것처럼 반복중에 break를 만나면 반복문이 멈추고, 빠져나오게 됩니다. 이전 조건문 중 switch문에서 배웠던 break문도 switch문을 종료하는 역할을 했었습니다. 비슷한 역할이라고 생각하시면 되겠네요.

반복문에서 보통 if문과 함께 사용되는 경우가 많으며 해당 조건에 따라 반복을 중지해야 되는 경우 쓰입니다.

public class BreakSample {

	public static void main(String[] args) {
		
		for (int i=0; i<10; i++) {
			if (i == 5) {
				break;
			}
			System.out.println(i);
		}
		
	}

}

 

실행 결과

0
1
2
3
4

 

 

이 예제는 for문을 통해 i0부터 9까지 10번 반복하며 출력되는 코드인데, if문 조건으로 i == 5 이면 break 문이 실행됩니다. i4일때까지는 출력문이 실행되는데, i5가 되면 for문이 중지되기 때문에 break 아래쪽의 출력문은 실행되지 않습니다. 4까지만 출력되고 종료되는 것입니다.

만약 중첩 반복문인 경우 안쪽 반복문에서 break되는 경우 안쪽만 중지되고 바깥쪽 for문은 중지되지 않습니다. 아래 예제를 실행해보겠습니다.

 

public class BreakSample2 {

	public static void main(String[] args) {
		
		for (int i=0; i<5; i++) {
			for (int j=0; j<5; j++) {
				if (j==3) {
					break;
				}
				System.out.println("i="+i+", j="+j);
			}
		}
		
	}

}

 

실행 결과

i=0 , j=0
i=0 , j=1
i=0 , j=2
i=1 , j=0
i=1 , j=1
i=1 , j=2
i=2 , j=0
i=2 , j=1
i=2 , j=2
i=3 , j=0
i=3 , j=1
i=3 , j=2
i=4 , j=0
i=4 , j=1
i=4 , j=2

 

안쪽 for문에서 j3이 되면 break문을 만나게 되어 반복문이 종료되는데 i는 계속 1씩 증가하면서 출력되고 있습니다. i0~4까지 증가하는 동안 각각 j0부터 반복되면서 3이되면 종료되는 구문이 반복되는 것입니다. 만약 바깥쪽 for문을 중지시키려면 반복문에 이름을 붙이고 종료시킬 수 있습니다.

 

public class BreakSample3 {

	public static void main(String[] args) {
		
		target:for (int i=0; i<5; i++) {
			for (int j=0; j<5; j++) {
				if (j==3) {
					break target;
				}
				System.out.println("i="+i+", j="+j);
			}
		}
		
	}

}

 

실행 결과

i=0 , j=0
i=0 , j=1
i=0 , j=2

 

 

바깥 for문 앞에 이름을 target이라고 붙여주고, 안쪽 for문에서 if문의 조건이 j==3 인 경우 break 뒤에 target이라는 이름을 붙여서 종료 대상을 지정할 수 있습니다. 실행 결과는 바깥 for문의 i변수가 1로 증가하지 않고 종료된것을 알 수 있습니다.

 

continue는 영어 의미로 계속하다라는 의미가 있습니다. 반복문 실행 도중 continue를 만나면 실행문을 더 이상 실행하지 않고 다음 반복으로 계속된다. 즉 해당 반복문만 중지 하는 것이다. 예제를 통해 살펴보겠습니다.

 

public class ContinueSample {

	public static void main(String[] args) {
		
		for (int i=0; i<10; i++) {
			if (i == 5) {
				continue;
			}
			System.out.println(i);
		}
		
	}

}

 

실행 결과

0
1
2
3
4
6
7
8
9

 

for 문 실행 도중 if 문의 조건 i==5 조건문이 만족하는 경우 continue 구문이 실행되는데, 해당 반복만 중지되고, 반복은 계속되기 때문에 i5인 경우만 continue 아래쪽 실행문 실행되지 않고, 다른 반복은 출력문이 모두 실행됩니다. 따라서 실행 결과를 보면 0부터 9까지 출력되는 중 5만 출력되지 않게 된것입니다.

 

break 문은 반복문 자체가 중지되고, continue는 현재 반복만 중지되고, continue 아래쪽 코드는 실행되지 않고 다음 반복으로 넘어간다는 것을 기억하세요.