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

C++로 역다이아몬드 패턴 출력하기: 완벽 가이드

개요

이 튜토리얼에서는 C++을 사용하여 역다이아몬드 패턴을 출력하는 프로그램을 살펴보겠습니다.

사용자로부터 N 값이 주어지면, 프로그램은 높이가 2N-1인 역다이아몬드 모양의 별(*) 패턴을 화면에 출력하는 것이 목표입니다.

패턴의 구조 이해하기

역다이아몬드 패턴은 크게 두 부분으로 나눌 수 있습니다.

  • 윗부분(상단 절반): 각 줄마다 양쪽 끝의 별 개수가 하나씩 감소하고, 가운데 공백이 두 칸씩 늘어납니다.
  • 아랫부분(하단 절반): 윗부분과 반대로 양쪽 끝의 별이 하나씩 증가하고, 가운데 공백이 줄어듭니다.

즉, 왼쪽 삼각형 + 가운데 공백 영역 + 오른쪽 삼각형의 조합으로 각 줄이 구성됩니다.

C++ 구현 코드

#include<bits/stdc++.h>
using namespace std;
//역다이아몬드 패턴을 출력하는 함수
void printDiamond(int n){
    cout<<endl;
    int i, j = 0;
    //윗부분(상단 절반)을 위한 반복문
    for (i = 0; i < n; i++) {
       //왼쪽 삼각형
       for (j = i; j < n; j++)
          cout<<"*";
       //가운데 공백
       for (j = 0; j < 2 * i + 1; j++)
          cout<<" ";
       //오른쪽 삼각형
       for (j = i; j < n; j++)
          cout<<"*";
       cout<<endl;
    }
    //아랫부분(하단 절반)을 위한 반복문
    for (i = 0; i < n - 1; i++) {
       //왼쪽 삼각형
       for (j = 0; j < i + 2; j++)
          cout<<"*";
       //가운데 공백
       for (j = 0; j < 2 * (n - 1 - i) - 1; j++)
          cout<<" ";
       //오른쪽 삼각형
       for (j = 0; j < i + 2; j++)
          cout<<"*";
       cout<<endl;
    }
    cout<<endl;
}
int main(){
    int n = 5;
    printDiamond(n);
    return 0;
}

실행 결과

N = 5일 때 프로그램을 실행하면 아래와 같은 역다이아몬드 패턴이 출력됩니다.

 ***** *****
****     ****
***       ***
**          **
*             *
**          **
***       ***
 ****     ****
 ***** *****

코드 동작 원리

1. 윗부분 처리

첫 번째 반복문은 총 N줄을 담당합니다. 각 줄에서 왼쪽 삼각형은 n - i개의 별을 출력하고, 가운데는 2 * i + 1개의 공백을 출력한 뒤, 오른쪽 삼각형이 왼쪽과 대칭되도록 같은 개수의 별을 출력합니다.

2. 아랫부분 처리

두 번째 반복문은 N-1줄을 담당합니다. 줄이 내려갈수록 별의 개수가 i + 2개씩 증가하고, 가운데 공백은 2 * (n - 1 - i) - 1개씩 감소하여 다이아몬드가 서서히 닫히는 형태를 만듭니다.

3. 시간 복잡도

전체 패턴의 높이가 2N-1이고 각 줄의 길이도 O(N)이므로, 이 알고리즘의 시간 복잡도는 O(N²)입니다.

마무리

역다이아몬드 패턴 문제는 중첩 반복문과 별 찍기 로직을 연습하기에 좋은 예제입니다. 코드를 직접 수정하면서 N 값을 바꿔 보거나, 공백 대신 다른 문자를 사용해 다양한 변형 패턴을 만들어 보세요.