for문과 중첩for문

Jaemyeong Lee·2024년 8월 20일
0

어소트락2017

목록 보기
10/20

for문과 중첩 for문 강의 코드 분석

이번 포스트에서는 C++에서 반복문 중 하나인 for문과 이를 응용한 중첩 for문에 대해 예제 코드를 통해 상세히 분석하겠습니다. for문은 특정 조건이 만족될 때까지 반복적으로 코드를 실행하는 구조를 가지고 있으며, 이를 올바르게 이해하고 사용하면 효율적인 코드 작성이 가능합니다.


1. 기본 for문 구조

// for문 : 반복문의 한 종류이다.
// 형태 : for(초기값; 조건식; 증감값){}의 형태로 구성이 된다.
// 조건식이 true이면 코드블럭의 코드가 동작된다.
// 무한루프를 돌릴때는 for(;;){} 을 해주면 무한대로 돌아간다.
// for문에서 초기값은 처음 for문에 진입할 때 딱 한번 동작된다.
// 그 후에 조건식을 체크하고 조건식이 true면 동작되고 
// 증감 -> 조건 -> 증감 -> 조건의 순서로 처리되다가 
// 조건이 false이거나 break를 만나면 for문을 빠져나가게 된다.

주석 분석:

  • for문은 특정 조건을 만족할 때까지 반복적으로 코드 블록을 실행하는 구조입니다.
  • 기본 형태는 for(초기값; 조건식; 증감값) {}입니다.
    • 초기값: 반복문이 처음 실행될 때 단 한 번만 실행됩니다.
    • 조건식: 반복이 계속될지 여부를 결정합니다. true이면 블록 내의 코드가 실행되고, false이면 반복이 종료됩니다.
    • 증감값: 각 반복이 끝날 때마다 실행되어 변수를 갱신합니다.
  • 무한 루프를 만들고 싶을 때는 for(;;){}처럼 조건식과 증감값을 생략하면 됩니다.
  • 반복이 계속되는 동안, 실행 순서는 "초기값 -> 조건식 체크 -> 코드 실행 -> 증감값 -> 조건식 체크"가 됩니다. 조건식이 false가 되거나 break가 호출되면 반복문이 종료됩니다.

2. 기본적인 for문 예제

// 초기값 : i = 0 조건식 : i < 10 증감값 : ++i
// 먼저 for문에 진입하면서 초기값이 실행되므로 i를 0으로 초기화 한다.
// 그 후에 i < 10을 체크해서 0일때는 true가 나오게 되어 i값을 출력한다.
// 그 후에 증감을 처리하는데 ++를 하면 0에서 1이 되고 조건을 체크하게 된다.
// 1은 10보다 작으므로 true가 나오고 1출력 하고 ++해서 2가 되고 조건 true여서 2를 출력한다.
// 2,3,4,5,6,7,8,9까지 반복하고 각각 조건이 i < 10 이하이기 때문에 조건이 true여서 
// 9를 출력하고 ++ 10이 된다.
// 10 < 10 연산을 하면 조건이 false가 되어 반복문을 빠져나오게 된다.
for(int i = 0; i< 10; i++)
{
	cout << i << endl;
}

코드 분석:

  • 초기값: int i = 0; - i0으로 초기화됩니다. 이 초기화는 for문이 처음 실행될 때만 한 번 수행됩니다.
  • 조건식: i < 10 - 이 조건식이 true이면 반복문 내부의 코드가 실행됩니다. i10보다 작은 동안 반복이 계속됩니다.
  • 증감값: ++i - 반복이 끝날 때마다 i1씩 증가합니다.
  • 동작 순서:
    1. i0으로 초기화됩니다.
    2. i < 10 조건을 평가하여 true인 경우 cout << i << endl;를 실행하여 i 값을 출력합니다.
    3. i1 증가하고 다시 조건식을 평가합니다.
    4. 이 과정이 i10이 되기 전까지 반복됩니다. i10이 되는 순간 조건이 false가 되어 반복문을 종료합니다.
  • 출력 결과: 0부터 9까지의 숫자가 한 줄씩 출력됩니다.

3. 구구단 2단 출력

// 구구단 2단을 출력
for (int i = 1; i < 10; ++i)
{
	printf("%d * %d = %d\n", 2, i, 2 * i);
	cout << "2 * " << i << " = " << 2 * i << endl;
}

코드 분석:

  • 초기값: int i = 1; - i1로 초기화하여 구구단의 첫 번째 항을 설정합니다.
  • 조건식: i < 10 - i10보다 작을 때까지 반복합니다.
  • 증감값: ++i - i를 1씩 증가시키며 구구단의 다음 항으로 이동합니다.
  • 동작:
    • printfcout을 사용하여 2 * i의 결과를 출력합니다.
    • printf는 C 스타일 출력 함수, cout은 C++ 스타일 출력 스트림입니다.
  • 출력 결과:
    2 * 1 = 2
    2 * 2 = 4
    2 * 3 = 6
    ...
    2 * 9 = 18
    • 구구단 2단이 차례대로 출력됩니다.

4. 짝수만 출력하는 for문

// 1 ~ 100 사이의 숫자중 짝수만 출력하는 for문을 작성해보자(if문 사용 x).
// i+=2 -> i = i+2 2일때 4가 되고 4일때 6 6 일때 8을 출력한다. (짝수만 출력)
for(int i = 2; i <= 100; i+=2)
{
	printf("%d ", i);
}
printf("\n");

코드 분석:

  • 초기값: int i = 2; - i2로 초기화하여 첫 번째 짝수인 2부터 반복을 시작합니다.
  • 조건식: i <= 100 - i100 이하일 때까지 반복합니다.
  • 증감값: i += 2 - i2씩 증가시켜 짝수만 출력하도록 합니다.
  • 동작:
    • 첫 번째 짝수인 2부터 시작하여 i2씩 증가시키면서 짝수를 출력합니다.
    • printf("%d ", i);를 사용해 짝수를 출력하며, 이후 i100을 넘으면 반복이 종료됩니다.
  • 출력 결과:
    2 4 6 8 10 ... 100
    • 1부터 100 사이의 모든 짝수가 출력됩니다.

5. 3과 7의 공배수 출력

// 1 ~ 100 사이의 숫자중 3과 7의 공배수만 출력하는 if문을 만들어보자
for(int i =1; i <= 100; ++i)
{
	if((i % 3) == 0 && (i%7)==0)
	{
		printf("%d ", i);
	}
}

코드 분석:

  • 초기값: int i = 1; - i1로 초기화하여 첫 번째 숫자부터 시작합니다.
  • 조건식: i <= 100 - i100 이하일 때까지 반복합니다.
  • 증감값: ++i - i를 1씩 증가시켜 다음 숫자로 이동합니다.
  • 동작:
    • if문을 사용하여 i37의 공배수인지 확인합니다. 공배수는 i % 3 == 0 && i % 7 == 0로 표현됩니다.
    • 공배수인 경우에만 printf로 출력합니다.
  • 출력 결과:
    21 42 63 84
    • 1부터 100 사이의 숫자 중 3과 7의 공배수인 21, 42, 63, 84가 출력됩니다.

6. 중첩 for문

/*
 * 중첩 for문 : for문 안에 또 다른 for문이 존재하는 형태이다.
 */

for (int i= 0; i < 10; ++i)
{
	for (int j = 0; j < 10; ++j)
	{
		cout << " i = " << i << "," << "

 j = " << j << endl;
	}
}

코드 분석:

  • 중첩 for문: for문 안에 또 다른 for문이 들어가 있는 구조입니다.
  • 외부 루프:
    • 초기값: int i = 0; - i0으로 초기화됩니다.
    • 조건식: i < 10 - i10보다 작을 때까지 외부 루프가 반복됩니다.
    • 증감값: ++i - i는 반복이 끝날 때마다 1씩 증가합니다.
  • 내부 루프:
    • 초기값: int j = 0; - j0으로 초기화됩니다.
    • 조건식: j < 10 - j10보다 작을 때까지 내부 루프가 반복됩니다.
    • 증감값: ++j - j는 반복이 끝날 때마다 1씩 증가합니다.
  • 동작:
    • 외부 루프가 실행되면, 내부 루프가 그 안에서 j0부터 9까지 반복됩니다.
    • 내부 루프가 끝나면, i가 1 증가하고 다시 내부 루프가 실행됩니다.
    • 각 반복에서 cout << "i = " << i << "," << " j = " << j << endl;를 통해 ij의 값을 출력합니다.
  • 출력 결과:
    i = 0, j = 0
    i = 0, j = 1
    ...
    i = 0, j = 9
    i = 1, j = 0
    ...
    i = 9, j = 9
    • ij의 모든 조합이 출력됩니다.

중첩 for문 과제

과제 1: 구구단 출력

구구단을 2단부터 9단까지 출력하는 중첩 for문을 작성해 보세요. 각 단을 출력할 때, 각 단의 곱셈 결과가 올바르게 출력되도록 중첩 for문을 활용하면 됩니다. 이 문제는 이중 반복문의 기본적인 활용을 연습하기에 좋은 예제입니다.


과제 2: 별 피라미드 (왼쪽 정렬)

아래와 같은 형태로 별(*)을 출력하는 프로그램을 작성해 보세요. 첫 번째 줄에 별이 하나, 두 번째 줄에 별이 두 개, 이런 식으로 줄이 증가할수록 별의 개수가 하나씩 증가합니다.

*
**
***
****
*****

중첩 for문을 사용하여, 바깥쪽 반복문이 행을, 안쪽 반복문이 각 행에 출력될 별의 개수를 제어하도록 구현합니다.


과제 3: 역 피라미드 별 출력

이번에는 별을 아래와 같은 형태로 출력해 보세요. 첫 번째 줄에는 별이 다섯 개, 두 번째 줄에는 네 개, 이런 식으로 줄이 증가할수록 별의 개수가 하나씩 줄어듭니다.

*****
****
***
**
*

이 문제에서는 중첩 for문을 활용하여, 바깥쪽 반복문이 행을, 안쪽 반복문이 각 행에 출력될 별의 개수를 감소시키는 방식으로 코드를 작성해 보세요.


과제 4: 중앙 정렬 피라미드 별 출력

이번 과제는 약간 난이도가 높습니다. 별을 아래와 같이 출력하는 프로그램을 작성해 보세요. 별이 중앙에 정렬되도록 하기 위해 공백( )을 적절히 사용해야 합니다.

    *
   ***
  *****
 *******

결론

위의 과제들은 중첩 for문을 활용한 반복 작업의 다양한 응용을 연습할 수 있는 좋은 예제들입니다. 각 문제를 풀면서 반복문의 흐름과 중첩 구조에 대한 이해를 높일 수 있습니다. 이 과제들을 스스로 해결해 보고, 코드가 잘 작동하는지 확인하는 과정을 통해 프로그래밍 실력을 한 단계 업그레이드해 보세요!

결론

이번 포스트에서는 C++의 for문과 중첩 for문에 대해 자세히 알아보았습니다. 반복문은 프로그래밍에서 매우 중요한 구조로, 올바르게 사용하면 코드의 간결성과 효율성을 크게 높일 수 있습니다. 특히, 중첩 for문은 이중 반복이 필요한 상황에서 매우 유용하게 사용됩니다. 각 예제를 통해 for문의 기본적인 사용법과 응용 방법을 잘 이해하시기 바랍니다.

profile
李家네_공부방

0개의 댓글