C 언어를 활용하면 별표(*)를 이용한 다양한 패턴을 콘솔에 출력할 수 있습니다. 일반적으로 꽉 찬(filled) 피라미드 패턴은 비교적 간단하게 만들 수 있지만, 속이 빈(hollow) 형태로 출력하려면 몇 가지 트릭이 필요합니다. 이 글에서는 속이 빈 피라미드와 속이 빈 다이아몬드 패턴을 생성하는 방법을 예제 코드와 함께 자세히 살펴보겠습니다.
속이 빈 피라미드(Hollow Pyramid)
속이 빈 피라미드의 구조는 다음과 같은 규칙을 따릅니다.
- 첫 번째 줄에는 별표 1개를 출력합니다.
- 마지막 줄에는 n개의 별표를 연속으로 출력합니다.
- 나머지 줄에서는 줄의 시작과 끝에 정확히 별표 2개만 출력하고, 그 사이는 공백으로 채워 속이 빈 모양을 만듭니다.
즉, 각 줄마다 앞부분에 공백을 출력해 피라미드의 계단식 형태를 만들고, 첫 줄과 마지막 줄을 제외한 나머지 줄에서는 내부 공간을 공백으로 처리하는 것이 핵심입니다.
예제 코드
#include <stdio.h>
int main() {
int n, i, j;
printf("Enter number of lines: ");
scanf("%d", &n);
for(i = 1; i<=n; i++) {
for(j = 1; j<=(n-i); j++){ // 별표 앞에 공백 출력
printf(" ");
}
if(i == 1 || i == n){ // 첫 줄과 마지막 줄은 별표를 연속으로 출력
for(j = 1; j<=i; j++) {
printf("* ");
}
} else {
printf("*"); // 각 줄의 시작 위치에 별표 출력
for(j = 1; j<=2*i-3; j++) { // 속이 빈 부분을 공백으로 채움
printf(" ");
}
printf("*"); // 각 줄의 끝 위치에 별표 출력
}
printf("\n");
}
}실행 결과
줄 수로 20을 입력했을 때의 출력 결과는 아래와 같습니다. 위쪽부터 한 개씩 시작해 점점 넓어지다가, 마지막 줄에서 전체 폭만큼 별표가 가득 찹니다.
Enter number of lines: 20
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* * * * * * * * * * * * * * * * * * *속이 빈 다이아몬드(Hollow Diamond)
속이 빈 다이아몬드 패턴은 피라미드보다 조금 더 복잡합니다. 기본 규칙은 다음과 같습니다.
- 첫 번째 줄과 마지막 줄에는 별표 1개씩만 출력합니다.
- 나머지 줄에서는 줄의 시작과 끝에 별표 2개를 출력하고, 사이는 공백으로 채웁니다.
다이아몬드는 크게 상단(위쪽 절반)과 하단(아래쪽 절반), 두 부분으로 나눌 수 있습니다. 상단에서는 줄이 진행될수록 공백 개수를 늘려가며 넓어지고, 하단에서는 반대로 공백 개수를 줄여가며 좁혀집니다. 이를 처리하기 위해 중간 지점을 가리키는 변수 mid를 사용하면, 전체 줄 번호를 두 부분으로 나누어 깔끔하게 구현할 수 있습니다.
예제 코드
#include <stdio.h>
int main() {
int n, i, j, mid;
printf("Enter number of lines: ");
scanf("%d", &n);
if(n %2 == 1) { // n이 홀수이면 짝수로 만들기 위해 1 증가
n++;
}
mid = (n/2);
for(i = 1; i<= mid; i++) { // 상단(위쪽 절반) 부분
for(j = 1; j<=(mid-i); j++){ // 별표 앞에 공백 출력
printf(" ");
}
if(i == 1) {
printf("*");
} else {
printf("*"); // 각 줄의 시작 위치에 별표 출력
for(j = 1; j<=2*i-3; j++){ // 속이 빈 부분을 공백으로 채움
printf(" ");
}
printf("*");
}
printf("\n");
}
for(i = mid+1; i<n; i++) { // 하단(아래쪽 절반) 부분
for(j = 1; j<=i-mid; j++) { // 별표 앞에 공백 출력
printf(" ");
}
if(i == n-1) {
printf("*");
} else {
printf("*"); // 각 줄의 시작 위치에 별표 출력
for(j = 1; j<=2*(n - i)-3; j++) { // 속이 빈 부분을 공백으로 채움
printf(" ");
}
printf("*");
}
printf("\n");
}
}실행 결과
줄 수로 15를 입력하면 입력값이 자동으로 16으로 조정되어 대칭적인 다이아몬드가 완성됩니다. 맨 위에서 별표 하나로 시작해 점점 벌어졌다가, 중간 이후부터는 다시 좁아지며 맨 아래에서 별표 하나로 끝납니다.
Enter number of lines: 15
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*마무리
이처럼 반복문과 조건문을 적절히 조합하면 복잡해 보이는 속이 빈 패턴도 손쉽게 구현할 수 있습니다. 핵심은 각 줄의 공백 개수와 별표의 위치를 규칙화하는 것입니다. 이 예제를 응용하면 삼각형, 모래시계, 오른쪽 정렬 피라미드 등 다양한 변형 패턴도 직접 만들어 볼 수 있으니, 여러 입력값으로 실험해 보면서 원리를 익혀보시기 바랍니다.