문제 상황
C 언어에서 피라미드나 직각삼각형처럼 다양한 형태(패턴)로 숫자를 출력하려면 어떤 논리를 사용해야 할까요?
해결 방법
숫자나 기호를 여러 가지 모양으로 출력하려면 for 반복문을 활용하면 됩니다. 핵심은 중첩 반복문(nested loop)입니다.
- 바깥쪽 반복문: 전체 줄(행)의 개수를 제어합니다.
- 안쪽 반복문: 각 줄에 출력될 공백이나 문자의 개수를 제어합니다.
예제 1: 피라미드 패턴 출력하기
다음은 별표(*)로 피라미드 모양을 출력하는 C 프로그램입니다.
#include <stdio.h>
int main(){
int n;
printf("Enter number of lines: ");
scanf("%d", &n);
printf("\n");
// 줄 수만큼 반복하는 바깥쪽 루프
for(int i = 1; i <= n; i++){
// 각 줄 앞에 들어갈 공백을 출력하는 루프
for(int space = 0; space <= n - i; space++){
printf(" ");
}
// 별표(*)를 출력하는 루프
for(int j = 1; j <= i * 2 - 1; j++){
printf(" * ");
}
printf("\n");
}
return 0;
}
동작 원리: i번째 줄에서는 먼저 n−i개의 공백을 출력한 뒤, 2×i−1개의 별표를 출력합니다. 이 규칙 덕분에 위쪽은 좁고 아래쪽은 넓은 대칭형 피라미드가 완성됩니다.
실행 결과
Enter number of lines: 8
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * *
예제 2: 직각삼각형 패턴으로 숫자 출력하기
다음은 숫자를 직각삼각형 형태로 출력하는 프로그램입니다.
#include <stdio.h>
void main(){
int i, j, rows;
printf("Input number of rows : ");
scanf("%d", &rows);
for(i = 1; i <= rows; i++){
for(j = 1; j <= i; j++)
printf("%d", j);
printf("\n");
}
}
동작 원리: 바깥쪽 루프 변수 i는 현재 줄 번호를 나타내고, 안쪽 루프는 1부터 i까지의 숫자를 한 줄에 이어서 출력합니다. 그 결과 첫째 줄에는 '1', 둘째 줄에는 '12'처럼 줄이 내려갈수록 숫자가 하나씩 늘어나며 직각삼각형 모양이 만들어집니다.
실행 결과
Input number of rows : 10 1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910
마무리
이처럼 중첩 for 반복문과 각 줄의 출력 개수를 조절하는 규칙만 잘 세우면 피라미드, 직각삼각형은 물론 다이아몬드, 역삼각형 등 다양한 패턴도 쉽게 구현할 수 있습니다. 패턴 출력 문제는 반복문과 조건문 감각을 기르는 데 매우 좋은 연습 소재이므로, 직접 코드를 수정해 가며 여러 가지 모양을 만들어 보시길 권합니다.