C 언어에서 다이아몬드(마름모) 형태로 별(*)을 출력하려면 중첩 for 루프(nested for loop)를 활용하면 됩니다. 다이아몬드 패턴은 크게 윗부분(상단 삼각형)과 아랫부분(하단 역삼각형)으로 나누어 생각할 수 있으며, 각 부분마다 공백과 별의 개수를 규칙적으로 조절해 출력합니다.
1. 다이아몬드 윗부분 출력 로직
다이아몬드의 상단은 아래로 갈수록 별이 많아지는 정삼각형 구조입니다. 바깥 루프는 행(row)을 제어하고, 안쪽 첫 번째 루프는 왼쪽에 들어갈 공백을, 두 번째 루프는 별을 출력합니다.
// 다이아몬드 윗부분 로직
for (j = 1; j <= rows; j++){
for (i = 1; i <= rows-j; i++)
printf(" "); // 왼쪽 공백 출력
for (i = 1; i<= 2*j-1; i++)
printf("*"); // 별 출력 (홀수 개씩 증가)
printf("\n"); // 줄바꿈
}예를 들어 rows = 5라고 가정하면, 위 코드는 다음과 같은 결과를 출력합니다.
* *** ***** ******* *********
핵심 규칙은 다음과 같습니다.
- j번째 행에서 공백은 (rows - j)개 출력
- 별은 (2 * j - 1)개, 즉 1, 3, 5, 7, 9처럼 홀수 개씩 증가
2. 다이아몬드 아랫부분 출력 로직
다이아몬드의 하단은 위로 갈수록 별이 줄어드는 역삼각형 구조입니다. 이번에는 공백이 점점 많아지고, 별의 개수는 점점 줄어듭니다.
// 다이아몬드 아랫부분 로직
for (j = 1; j <= rows - 1; j++){
for (i = 1; i <= j; i++)
printf(" "); // 왼쪽 공백 출력 (증가)
for (i = 1 ; i <= 2*(rows-j)-1; i++)
printf("*"); // 별 출력 (감소)
printf("\n");
}역시 rows = 5일 때, 하단 부분은 다음과 같이 출력됩니다.
******* ***** *** *
3. 전체 예제 코드
두 로직을 하나로 합치면 사용자로부터 행 수를 입력받아 완전한 다이아몬드 패턴을 출력하는 프로그램을 만들 수 있습니다.
#include <stdio.h>
int main(){
int rows, i, j;
printf("행의 개수를 입력하세요\n");
scanf("%d", &rows);
// 다이아몬드 윗부분
for (j = 1; j <= rows; j++){
for (i = 1; i <= rows-j; i++)
printf(" ");
for (i = 1; i<= 2*j-1; i++)
printf("*");
printf("\n");
}
// 다이아몬드 아랫부분
for (j = 1; j <= rows - 1; j++){
for (i = 1; i <= j; i++)
printf(" ");
for (i = 1 ; i <= 2*(rows-j)-1; i++)
printf("*");
printf("\n");
}
return 0;
}4. 실행 결과
입력값을 5로 넣었을 때의 실행 결과입니다.
행의 개수를 입력하세요
5
*
***
*****
*******
*********
*******
*****
***
*정리
다이아몬드 패턴 출력의 핵심은 공백과 별의 개수 규칙을 파악하는 것입니다. 상단에서는 별이 홀수 개씩 늘어나고(2j-1), 하단에서는 반대로 줄어듭니다(2(rows-j)-1). 이 원리만 이해하면 피라미드, 역피라미드 등 다양한 별 찍기 패턴도 쉽게 응용할 수 있습니다.