개요
이 튜토리얼에서는 C++을 사용하여 역피라미드(Inverse Pyramid) 모양의 알파벳 문자 패턴을 출력하는 프로그램을 살펴봅니다.
역피라미드 패턴은 위에서 아래로 갈수록 문자의 개수가 하나씩 줄어들고, 각 행마다 왼쪽 공백이 늘어나면서 뒤집힌 피라미드 형태를 이루는 패턴입니다. 행의 개수 n이 주어지면, 첫 번째 행에는 A부터 시작하는 알파벳이 정방향과 역방향으로 나란히 배치되고, 그다음 행부터는 양쪽 끝 글자가 하나씩 제거되며 대칭적인 삼각형 모양이 완성됩니다.
예를 들어 n = 5일 때, 첫 행은 A B C D E E D C B A처럼 가장 길게 출력되고, 마지막 행은 A A로 끝나게 됩니다.
알고리즘 동작 원리
- 바깥쪽 반복문: i가 n부터 1까지 감소하며 각 행을 담당합니다.
- 공백 출력 반복문: 행 번호가 아래로 내려갈수록 왼쪽 공백을 두 칸씩 추가하여 피라미드가 오른쪽으로 밀리는 형태를 만듭니다.
- 정방향 출력 반복문: 'A'부터 시작해 i번째 문자까지 순서대로 출력합니다.
- 역방향 출력 반복문: 마지막에 출력된 문자부터 다시 A까지 거꾸로 출력하여 좌우 대칭 구조를 완성합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 역피라미드 패턴을 출력하는 함수
void inv_pyramid(int n){
int i, j, num, gap;
for (i = n; i >= 1; i--) {
// 행마다 왼쪽 공백 출력
for (gap = n - 1; gap >= i; gap--) {
cout<<" ";
cout<<" ";
}
// A부터 차례대로 출력
num = 'A';
for (j = 1; j <= i; j++) {
cout << (char) num++ <<" ";
}
// 마지막 문자부터 역순으로 출력
for (j = i - 1; j >= 0; j--) {
cout << (char) --num <<" ";
}
cout<<"\n";
}
}
int main(){
int n = 5;
inv_pyramid(n);
return 0;
}실행 결과
A B C D E E D C B A
A B C D D C B A
A B C C B A
A B B A
A A코드 설명
이 프로그램의 핵심은 세 개의 중첩 반복문입니다. 먼저 inv_pyramid() 함수는 매개변수로 받은 행 개수 n만큼 반복하면서, 각 행마다 필요한 공백과 알파벳을 계산해 출력합니다.
정방향 반복문에서는 num 변수를 문자 'A'의 아스키 코드 값(65)으로 초기화한 뒤, 출력할 때마다 값을 증가시켜 B, C, D... 순서로 문자를 만들어냅니다. 이어지는 역방향 반복문에서는 감소 연산자(--num)를 활용해 방금 증가시킨 값을 다시 하나씩 줄여가며 대칭 부분을 출력합니다.
이러한 패턴 출력 문제는 반복문과 아스키 코드 변환((char) 캐스팅)을 동시에 연습할 수 있어, C++ 초보자에게 매우 유용한 학습 예제입니다. n 값을 변경하면 원하는 크기의 역피라미드 패턴을 자유롭게 생성할 수 있습니다.