문제 개요
C 언어에서 for 루프 또는 while 루프를 사용하여 아래와 같은 패턴을 순서대로 출력하는 방법을 알아봅니다.
1. E 2. 01 3. 0011 4. 000111 5. 00001111
첫 번째 줄은 문자 'E'를 출력하고, 두 번째 줄부터는 줄 번호에서 1을 뺀 개수만큼 '0'과 '1'을 차례로 나열합니다.
for 루프를 사용한 예제 코드
#include <stdio.h>
#include <conio.h>
void main() {
int i, j, a = 0, b = 1, n;
clrscr();
printf("****************OUTPUT*****************\n\n");
printf("enter the value of n : ");
scanf("%d", &n);
printf("\n the required order is: \n\n");
for (i = 1; i <= n; i++) {
if (i == 1)
printf("%d. E", i);
else {
printf("%d. ", i);
/* 0을 (i-1)번 출력 */
for (j = 1; j <= i - 1; j++)
printf("%d", a);
/* 1을 (i-1)번 출력 */
for (j = 1; j <= i - 1; j++)
printf("%d", b);
}
printf("\n");
}
getch();
}
코드 동작 원리
- a = 0, b = 1 : 출력에 사용할 두 숫자를 저장합니다.
- 외부 for 루프 : 1부터 n까지 반복하며 각 줄을 생성합니다.
- i == 1 조건 : 첫 번째 줄에서는 숫자 대신 문자 'E'를 출력합니다.
- 내부 for 루프 2개 : 첫 번째 루프는 0을 (i-1)번, 두 번째 루프는 1을 (i-1)번 출력하여 한 줄의 패턴을 완성합니다.
참고로 clrscr(), getch(), conio.h는 구형 Turbo C 컴파일러 전용 요소입니다. 최신 컴파일러(GCC 등)에서는 이 부분을 제거하고 main 함수의 반환형을 int로 선언하는 것이 좋습니다.
while 루프 버전
같은 결과는 while 루프로도 구현할 수 있습니다. 초기화, 조건 검사, 증감식을 직접 작성해야 한다는 점만 다릅니다.
#include <stdio.h>
int main() {
int i = 1, j, a = 0, b = 1, n;
printf("enter the value of n : ");
scanf("%d", &n);
printf("\n the required order is: \n\n");
while (i <= n) {
if (i == 1)
printf("%d. E", i);
else {
printf("%d. ", i);
j = 1;
while (j <= i - 1) {
printf("%d", a);
j++;
}
j = 1;
while (j <= i - 1) {
printf("%d", b);
j++;
}
}
printf("\n");
i++;
}
return 0;
}
실행 결과 (n = 5 입력 시)
****************OUTPUT***************** enter the value of n : 5 the required order is: 1. E 2. 01 3. 0011 4. 000111 5. 00001111
마무리
중첩 루프의 기본 원리만 이해하면 별 찍기, 삼각형 패턴 등 다양한 출력 문제에 같은 방식을 응용할 수 있습니다. 반복 횟수가 정해져 있다면 for 루프가, 조건에 따라 유연하게 반복해야 한다면 while 루프가 더 적합하므로 상황에 맞게 선택하면 코드 가독성이 크게 향상됩니다.