프로그램 개요
이 글에서는 C 언어를 사용해 콘솔 화면에 속이 찬 마름모(Solid Rhombus)와 속이 빈 마름모(Hollow Rhombus) 별표(*) 패턴을 출력하는 방법을 알아봅니다. 두 패턴 모두 사용자가 입력한 행(row) 수에 따라 크기가 결정되며, 중첩 반복문(for 문)을 활용하면 간단하게 구현할 수 있습니다.
알고리즘
1. 속이 빈 마름모
- 사용자로부터 마름모를 구성할 행 수를 입력받습니다.
- 입력받은 행 수만큼의 크기를 가진 속이 빈 마름모를 생성합니다.
- 첫 번째 행에는 행 수와 동일한 개수의 별(*)을 모두 출력합니다.
- 중간 행들은 각 줄의 첫 번째 별과 마지막 별만 출력하고, 그 사이는 공백으로 비워 둡니다.
- 마지막 행 역시 첫 번째 행처럼 행 수와 동일한 개수의 별을 모두 출력합니다.
2. 속이 찬 마름모
- 사용자로부터 행 수를 입력받습니다.
- 입력받은 행 수만큼의 크기를 가진 속이 찬 마름모를 생성합니다.
- 첫 번째 행부터 마지막 행까지, 매 행마다 행 수와 동일한 개수의 별을 모두 출력합니다.
두 패턴 모두 마름모의 기울기를 만들기 위해, 각 행의 별을 출력하기 전에 (전체 행 수 − 현재 행 번호)개의 공백을 먼저 출력한다는 점이 핵심입니다.
예제 코드
/* 속이 빈 마름모와 속이 찬 마름모 별표 패턴 출력 프로그램 */
#include <stdio.h>
int main() {
int r, c, rows; /* 속이 빈 마름모용 변수 */
int r1, c1, rows1; /* 속이 찬 마름모용 변수 */
printf("속이 빈 마름모 패턴의 행 수를 입력하세요: ");
scanf("%d", &rows);
printf("\n");
for (r = 1; r <= rows; r++) {
/* 왼쪽 공백 출력: 행이 내려갈수록 공백이 줄어듦 */
for (c = 1; c <= rows - r; c++) {
printf(" ");
}
/* 별 출력: 첫 행, 마지막 행, 그리고 각 행의 첫·마지막 열 */
for (c = 1; c <= rows; c++) {
if (r == 1 || r == rows || c == 1 || c == rows)
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("\n");
printf("속이 찬 마름모 패턴의 행 수를 입력하세요: ");
scanf("%d", &rows1);
printf("\n");
for (r1 = 1; r1 <= rows1; r1++) {
for (c1 = 1; c1 <= rows1 - r1; c1++) {
printf(" ");
}
for (c1 = 1; c1 <= rows1; c1++) {
printf("*");
}
printf("\n");
}
return 0;
}
참고: 원본 코드에 포함된 clrscr()과 getch()는 Turbo C 전용 함수입니다. GCC, Clang 등 최신 표준 컴파일러에서도 바로 실행할 수 있도록 위 코드에서는 제외했습니다.
핵심 로직 설명
- 왼쪽 공백 처리:
rows - r개의 공백을 출력해 행이 내려갈수록 별의 시작 위치가 오른쪽으로 이동하게 함으로써 마름모의 대각선 형태를 만듭니다. - 속이 빈 마름모의 조건:
r == 1 || r == rows || c == 1 || c == rows— 첫 번째 행, 마지막 행, 또는 각 행의 첫 번째·마지막 열인 경우에만 별을 출력하고, 나머지 위치에는 공백을 출력합니다. - 속이 찬 마름모: 별도의 조건 검사 없이 해당 행의 모든 열에 별을 출력하면 됩니다.
실행 결과
행 수를 5로 입력했을 때의 출력 결과는 다음과 같습니다.
속이 빈 마름모 (5행)
***** * * * * * * *****
속이 찬 마름모 (5행)
***** ***** ***** ***** *****