이번 튜토리얼에서는 C++를 활용해 흥미로운 대칭 패턴을 출력하는 프로그램을 다뤄보겠습니다.
이 문제에서는 패턴의 절반 너비(half-width)가 입력값으로 주어집니다. 목표는 해당 너비에 맞춰 왼쪽 부분과 오른쪽 부분이 서로 거울상(mirror image)처럼 대칭을 이루는 패턴을 화면에 출력하는 것입니다. 완성된 결과물은 마치 나비가 날개를 편 듯한 모양의 별(*) 패턴이 됩니다.
구현 아이디어
패턴은 크게 위쪽 절반과 아래쪽 절반, 두 부분으로 나누어 생각할 수 있습니다.
- 위쪽 절반: 각 행마다 왼쪽 영역은 열 번호(j)가 행 번호(i)보다 클 때 공백을, 그렇지 않으면 별(*)을 출력합니다. 오른쪽 영역은 중앙을 기준으로 같은 조건을 반사시켜 i ≤ (2×n − j)일 때 공백을 출력합니다.
- 아래쪽 절반: 위쪽 로직의 조건을 뒤집은 형태(i > n − j + 1, i + n > j)를 사용해 아래로 뒤집힌 대칭 구조를 완성합니다.
이처럼 이중 반복문과 간단한 조건 비교만으로도 정교한 좌우 대칭 패턴을 만들 수 있습니다.
예제 코드
#include<stdio.h>
// 주어진 패턴을 출력하는 함수
void print_pattern(int n){
int i, j;
// 위쪽 절반 출력
for (i = 1; i <= n; i++){
for (j = 1; j <= (2*n); j++){
// 왼쪽 부분
if (i < j)
printf(" ");
else
printf("*");
// 오른쪽 부분
if (i <= ((2*n) - j))
printf(" ");
else
printf("*");
}
printf("\n");
}
// 아래쪽 절반 출력
for (i = 1; i <= n; i++){
for (j = 1; j <= (2*n); j++){
// 왼쪽 부분
if (i > (n - j + 1))
printf(" ");
else
printf("*");
// 오른쪽 부분
if ((i + n) > j)
printf(" ");
else
printf("*");
}
printf("\n");
}
}
int main(){
print_pattern(6);
return 0;
}
실행 결과
print_pattern(6), 즉 절반 너비가 6일 때 프로그램은 다음과 같은 나비 모양의 대칭 패턴을 출력합니다.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
마무리
이 프로그램은 이중 반복문과 단순한 조건문만으로 좌우 대칭 패턴을 구현하는 대표적인 예제입니다. main 함수에서 호출하는 n 값을 바꿔가며 실행해 보면 다양한 크기의 패턴을 확인할 수 있습니다. 직접 값을 수정하고 조건식을 변형해 보면서 반복문과 인덱스 계산 규칙을 자연스럽게 익혀보시기 바랍니다.