Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 흥미로운 대칭 별(*) 패턴 출력하기


이번 튜토리얼에서는 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 값을 바꿔가며 실행해 보면 다양한 크기의 패턴을 확인할 수 있습니다. 직접 값을 수정하고 조건식을 변형해 보면서 반복문과 인덱스 계산 규칙을 자연스럽게 익혀보시기 바랍니다.