개요
이 튜토리얼에서는 C++을 사용하여 특정 숫자 패턴을 출력하는 프로그램을 작성하는 방법을 알아봅니다.
목표는 코드에서 반복문(loop) 구조를 활용해 아래와 같은 피라미드 형태의 숫자 패턴을 화면에 출력하는 것입니다.
1 232 34543 4567654 567898765
패턴 분석
패턴을 자세히 살펴보면 다음과 같은 규칙을 발견할 수 있습니다.
- 총 5개의 행(row)으로 구성되어 있으며, 각 행은 왼쪽에 공백이 채워져 피라미드 모양을 이룹니다.
- 각 행의 가장 왼쪽 숫자는 해당 행의 번호와 같습니다. 즉, 1번째 행은 1부터, 2번째 행은 2부터 시작합니다.
- 행의 중앙까지는 숫자가 1씩 증가하고, 중앙을 지나면 다시 1씩 감소하며 대칭을 이룹니다.
예를 들어 3번째 행은 3 → 4 → 5 → 4 → 3처럼 증가 후 감소하는 구조입니다.
예제 코드
#include<bits/stdc++.h>
using namespace std;
int main(){
int n = 5, i, j, num = 1, gap;
gap = n - 1;
for ( j = 1 ; j <= n ; j++ ){
num = j;
for ( i = 1 ; i <= gap ; i++ )
cout << " ";
gap --;
for ( i = 1 ; i <= j ; i++ ){
cout << num;
num++;
}
num--;
num--;
for ( i = 1 ; i < j ; i++){
cout << num;
num--;
}
cout << "\n";
}
return 0;
}코드 동작 원리
- 변수 초기화:
n은 출력할 행의 개수(5),num은 각 행의 시작 숫자,gap은 각 행 앞에 붙일 공백의 개수입니다. 초기값은n - 1, 즉 4입니다. - 외부 반복문:
j가 1부터n까지 증가하며 각 행을 담당합니다. 매 행이 시작될 때num을j로 설정하여 해당 행의 시작 숫자를 정합니다. - 공백 출력: 첫 번째 내부 반복문이
gap만큼 공백을 출력한 뒤gap을 1씩 줄여, 아래로 갈수록 공백이 줄어드는 피라미드 형태를 만듭니다. - 증가 부분 출력: 두 번째 내부 반복문은
j번만큼 숫자를 출력하며 매번num을 1씩 증가시킵니다. 이때 마지막에num이 한 번 더 증가된 상태이므로, 이후 두 번 감소(num--; num--;)시켜 대칭 지점으로 되돌립니다. - 감소 부분 출력: 세 번째 내부 반복문은
j - 1번만큼 숫자를 출력하며num을 1씩 감소시켜 좌우 대칭을 완성합니다. - 줄바꿈: 한 행의 출력이 끝나면
\n으로 줄을 바꾸고 다음 행으로 넘어갑니다.
실행 결과
1 232 34543 4567654 567898765
마무리
이 프로그램은 중첩 반복문(nested loop)과 변수 값의 증감 제어만으로 복잡해 보이는 숫자 패턴을 손쉽게 구현할 수 있음을 보여주는 좋은 예제입니다. n 값만 변경하면 원하는 크기의 피라미드 패턴을 자유롭게 출력할 수 있으니, 직접 값을 바꿔가며 연습해 보시기 바랍니다.