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

C++로 중공 피라미드와 다이아몬드 패턴 출력하기

이 글에서는 C++를 이용해 중공(hollow) 피라미드중공 다이아몬드 패턴을 생성하는 방법을 알아봅니다. 일반적인 꽉 찬(solid) 피라미드 패턴은 비교적 쉽게 만들 수 있지만, 속이 빈 형태로 만들려면 몇 가지 추가적인 기법이 필요합니다.

중공 피라미드(Hollow Pyramid)

중공 피라미드의 구조는 다음과 같습니다.

  • 첫 번째 줄에는 별(*) 하나만 출력합니다.
  • 마지막 줄에는 n개의 별을 연속해서 출력합니다.
  • 나머지 줄에서는 각 줄의 시작과 끝에 정확히 두 개의 별을 찍고, 그 사이는 공백으로 채워 속이 빈 모양을 만듭니다.

예제 코드

#include <iostream>
using namespace std;
int main() {
    int n, i, j;
    cout << "Enter number of lines: ";
    cin >> n;
    for(i = 1; i<=n; i++) {
        for(j = 1; j<=(n-i); j++) { // 별 앞에 공백 출력
            cout << " ";
        }
        if(i == 1 || i == n) { // 첫 줄과 마지막 줄은 별을 연속으로 출력
            for(j = 1; j<=i; j++) {
                cout << "* ";
            }
        }else{
            cout << "*"; // 각 줄의 시작 위치에 별 출력
            for(j = 1; j<=2*i-3; j++) { // 속을 비우기 위한 공백 출력
                cout << " ";
            }
            cout << "*"; // 각 줄의 끝 위치에 별 출력
        }
        cout << endl;
    }
}

출력 결과

C++로 중공 피라미드와 다이아몬드 패턴 출력하기

중공 다이아몬드(Hollow Diamond)

중공 다이아몬드는 첫 번째 줄과 마지막 줄에 별 하나씩만 출력하고, 나머지 줄에서는 시작과 끝에 두 개의 별을 찍어 그 사이를 공백으로 채웁니다.

다이아몬드는 크게 위쪽 절반아래쪽 절반, 두 부분으로 나눌 수 있습니다.

  • 위쪽 절반: 줄이 내려갈수록 공백 개수가 감소합니다.
  • 아래쪽 절반: 줄이 내려갈수록 공백 개수가 증가합니다.

이러한 흐름을 처리하기 위해 mid라는 변수를 사용하여 전체 줄 번호를 상·하 두 부분으로 나누어 계산합니다. 또한 입력값 n이 홀수일 경우에는 짝수로 만들기 위해 1을 더해 대칭이 올바르게 유지되도록 합니다.

예제 코드

#include <iostream>
using namespace std;
int main() {
    int n, i, j, mid;
    cout << "Enter number of lines: ";
    cin >> n;
    if(n %2 == 1) { // n이 홀수면 짝수로 맞추기 위해 1 증가
        n++;
    }
    mid = (n/2);
    for(i = 1; i<= mid; i++) {
        for(j = 1; j<=(mid-i); j++) { // 별 앞에 공백 출력
            cout << " ";
        }
        if(i == 1) {
            cout << "*";
        }else{
            cout << "*"; // 각 줄의 시작 위치에 별 출력
            for(j = 1; j<=2*i-3; j++) { // 속을 비우기 위한 공백 출력
                cout << " ";
            }
            cout << "*"; // 각 줄의 끝 위치에 별 출력
        }
        cout << endl;
    }
    for(i = mid+1; i<n; i++) {
        for(j = 1; j<=i-mid; j++) { // 별 앞에 공백 출력
            cout << " ";
        }
        if(i == n-1) {
            cout << "*";
        }else{
            cout << "*"; // 각 줄의 시작 위치에 별 출력
            for(j = 1; j<=2*(n - i)-3; j++) { // 속을 비우기 위한 공백 출력
                cout << " ";
            }
            cout << "*"; // 각 줄의 끝 위치에 별 출력
        }
        cout << endl;
    }
}

출력 결과

C++로 중공 피라미드와 다이아몬드 패턴 출력하기

정리

두 패턴 모두 반복문과 조건문을 조합하면 쉽게 구현할 수 있습니다. 핵심은 다음과 같습니다.

  • 피라미드: 줄 번호에 따라 선행 공백의 개수를 조절하고, 첫 줄과 마지막 줄만 특별 처리합니다.
  • 다이아몬드: 전체 높이를 mid를 기준으로 위아래로 나누어, 공백 개수를 늘렸다 줄였다 하며 대칭을 만듭니다.

이 로직을 응용하면 삼각형, 마름모 외에도 다양한 별 모양 패턴을 자유롭게 만들어 볼 수 있습니다.