이 글에서는 C++를 이용해 중공(hollow) 피라미드와 중공 다이아몬드 패턴을 생성하는 방법을 알아봅니다. 일반적인 꽉 찬(solid) 피라미드 패턴은 비교적 쉽게 만들 수 있지만, 속이 빈 형태로 만들려면 몇 가지 추가적인 기법이 필요합니다.
중공 피라미드(Hollow Pyramid)
중공 피라미드의 구조는 다음과 같습니다.
- 첫 번째 줄에는 별(*) 하나만 출력합니다.
- 마지막 줄에는 n개의 별을 연속해서 출력합니다.
- 나머지 줄에서는 각 줄의 시작과 끝에 정확히 두 개의 별을 찍고, 그 사이는 공백으로 채워 속이 빈 모양을 만듭니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int n, i, j;
cout << "Enter number of lines: ";
cin >> n;
for(i = 1; i<=n; i++) {
for(j = 1; j<=(n-i); j++) { // 별 앞에 공백 출력
cout << " ";
}
if(i == 1 || i == n) { // 첫 줄과 마지막 줄은 별을 연속으로 출력
for(j = 1; j<=i; j++) {
cout << "* ";
}
}else{
cout << "*"; // 각 줄의 시작 위치에 별 출력
for(j = 1; j<=2*i-3; j++) { // 속을 비우기 위한 공백 출력
cout << " ";
}
cout << "*"; // 각 줄의 끝 위치에 별 출력
}
cout << endl;
}
}출력 결과

중공 다이아몬드(Hollow Diamond)
중공 다이아몬드는 첫 번째 줄과 마지막 줄에 별 하나씩만 출력하고, 나머지 줄에서는 시작과 끝에 두 개의 별을 찍어 그 사이를 공백으로 채웁니다.
다이아몬드는 크게 위쪽 절반과 아래쪽 절반, 두 부분으로 나눌 수 있습니다.
- 위쪽 절반: 줄이 내려갈수록 공백 개수가 감소합니다.
- 아래쪽 절반: 줄이 내려갈수록 공백 개수가 증가합니다.
이러한 흐름을 처리하기 위해 mid라는 변수를 사용하여 전체 줄 번호를 상·하 두 부분으로 나누어 계산합니다. 또한 입력값 n이 홀수일 경우에는 짝수로 만들기 위해 1을 더해 대칭이 올바르게 유지되도록 합니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int n, i, j, mid;
cout << "Enter number of lines: ";
cin >> n;
if(n %2 == 1) { // n이 홀수면 짝수로 맞추기 위해 1 증가
n++;
}
mid = (n/2);
for(i = 1; i<= mid; i++) {
for(j = 1; j<=(mid-i); j++) { // 별 앞에 공백 출력
cout << " ";
}
if(i == 1) {
cout << "*";
}else{
cout << "*"; // 각 줄의 시작 위치에 별 출력
for(j = 1; j<=2*i-3; j++) { // 속을 비우기 위한 공백 출력
cout << " ";
}
cout << "*"; // 각 줄의 끝 위치에 별 출력
}
cout << endl;
}
for(i = mid+1; i<n; i++) {
for(j = 1; j<=i-mid; j++) { // 별 앞에 공백 출력
cout << " ";
}
if(i == n-1) {
cout << "*";
}else{
cout << "*"; // 각 줄의 시작 위치에 별 출력
for(j = 1; j<=2*(n - i)-3; j++) { // 속을 비우기 위한 공백 출력
cout << " ";
}
cout << "*"; // 각 줄의 끝 위치에 별 출력
}
cout << endl;
}
}출력 결과

정리
두 패턴 모두 반복문과 조건문을 조합하면 쉽게 구현할 수 있습니다. 핵심은 다음과 같습니다.
- 피라미드: 줄 번호에 따라 선행 공백의 개수를 조절하고, 첫 줄과 마지막 줄만 특별 처리합니다.
- 다이아몬드: 전체 높이를
mid를 기준으로 위아래로 나누어, 공백 개수를 늘렸다 줄였다 하며 대칭을 만듭니다.
이 로직을 응용하면 삼각형, 마름모 외에도 다양한 별 모양 패턴을 자유롭게 만들어 볼 수 있습니다.