C 언어 중첩 반복문을 활용한 숫자 피라미드 출력 분석

  • 4 minutes to read

이 글에서는 특정 형태로 숫자를 출력하는 C 언어 프로그램을 분석하고, 출력 결과를 예측하며, 코드의 각 부분이 어떤 역할을 하는지 해석해 봅니다. 특히 중첩 반복문과 조건문의 응용에 중점을 두고, 일부 코드 제거에 따른 출력 변화까지 살펴봅니다.


📘 문제 설명

다음은 특정 형태로 숫자를 출력하는 C 프로그램입니다. 코드를 실행한 뒤 입력값에 따라 어떤 결과가 출력되는지 분석하고, 특정 부분을 제거한 경우의 결과도 확인합니다.

코드: patterned-numeric-pyramid.c

#include <stdio.h>
int main(void) {
    int i, k, m, row, n = 0;
    printf("층수를 입력하세요:");
    scanf("%d", &row);

    for (i = 0; i < row; k = 0, i++) {
        // ㉠
        for (k = 0; k < row - i - 1; k++) 
            printf("*");

        for (m = 0; m < (2 * i) + 1; m++) {
            printf("%d", n);
            n++;
            if (n >= 10)
                // ㉡
                n = 0;
        }

        // ㉢
        for (k += m; k < 2 * row - 1; k++) 
            printf("*");

        printf("\n");
    }

    return 0;
}

🧠 코드 구조 분석

🔹 반복문 구성

  • i: 전체 줄 수 조절
  • k: 좌우 별(*) 출력용
  • m: 중앙 숫자 출력용
  • n: 출력할 숫자 (0부터 시작, 9까지 출력 후 0으로 초기화)

🔹 전체 줄의 길이

각 줄마다 출력되는 전체 문자 수는 항상 2 * row - 1로 고정됩니다.
예를 들어 row = 3이면 한 줄에 총 5개의 문자가 출력됩니다.


✍️ 문제 풀이

1️⃣ 이 실행되는 횟수 (row = 4)

전체 숫자 출력 개수

i 숫자 출력 수 (2*i + 1)
0 1
1 3
2 5
3 7
합계 16개

n은 0부터 시작하여 총 16번 증가하므로 n = 10일 때 한 번만 if(n >= 10) 조건을 만족하여 실행.

정답: 1회


2️⃣ row = 3일 때의 출력 결과

i 왼쪽 별 숫자 오른쪽 별 출력
0 ** 0 ** **0**
1 * 123 * *123*
2 없음 012345 없음 012345

출력:

**0**
*123*
012345

3️⃣ 제거 시 출력 결과 (row = 3)

왼쪽 별을 제거한 결과입니다. 오른쪽 별은 남아 있습니다.

출력:

0****
123**
012345

4️⃣ 모두 제거 시 출력 결과 (row = 3)

좌우의 모든 별을 제거하여 숫자만 출력합니다.

출력:

0
123
012345

📊 시각화 요약표

조건 왼쪽 * () 오른쪽 * () 숫자 출력 전체 줄 길이 특징
기본 있음 있음 가운데 정렬 고정 (2*row-1) 중심 피라미드 형태
제거 없음 있음 왼쪽 정렬 동일 숫자가 왼쪽으로 치우침
, 제거 없음 없음 숫자만 출력 줄마다 다름 비정형 정렬

🧩 학습 포인트

  • for (i = 0; i < row; k = 0, i++): 반복마다 k를 초기화하는 문법
  • n >= 10 조건: 숫자 0~9 순환 구조
  • k += m: 오른쪽 별 출력 계산 시 이전 숫자 개수 반영
  • 전체 줄 수와 출력 폭 조절: 2 * row - 1 규칙

✅ 요약 정답 정리

항목 정답
실행 횟수 (row = 4) 1회
기본 출력 (row = 3) **0**, *123*, 012345
제거 시 출력 0****, 123**, 012345
, 제거 시 출력 0, 123, 012345

📘 마무리

이 문제는 중첩 반복문, 조건문, 숫자 순환 로직, 정렬 패턴 등 다양한 C 언어 기초 문법을 종합적으로 연습할 수 있는 좋은 예제입니다. 특히 출력 결과를 예측하고, 코드 수정에 따른 결과 차이를 비교하는 능력을 기르기 좋습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com