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 언어 기초 문법을 종합적으로 연습할 수 있는 좋은 예제입니다. 특히 출력 결과를 예측하고, 코드 수정에 따른 결과 차이를 비교하는 능력을 기르기 좋습니다.

더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com