25.05.27 (4) - 추가 학습

김영하·2025년 5월 27일

C++

목록 보기
9/32

다이아몬드 모양 별 찍기

사용자로부터 정수를 입력받아,
해당 크기에 맞는 다이아몬드 모양을 *로 출력하는 프로그램

입출력 예시)

# 예시 1
입력:
4

출력:
   *
  ***
 *****
*******
 *****
  ***
   *

# 예시 2
입력:
2

출력:
 *
***
 *

# 예시 3
입력:
5

출력:
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

  • 1단계 코드
int main() {
	int x, y;
	cout << "숫자 입력: ";
	cin >> x;
	y = 2 * x - 1;

	for (int i = 1; i <= y; i++) {
        for (int a = 1; a < x; a++) {
            cout << " ";
        }
        for (int b = x; b == x; b--) {
            cout << "*";
        }
        for (int b = x; b == x; b++) {
            cout << "*";
        }
        for (int c = y; c > x; c--) {
            cout << " ";
        }
        cout << endl;
	}
    return 0;
}

  • 2단계 코드
    1단계 코드를 구성할 때,
    우선 1차적으로 생각해서 만든 것도 있지만
    우선 가운데 * 들이 한 줄이 되도록 만들어줄 필요가 있다

또한 추가적으로
아래줄에도 '별이 늘어났다 줄어났다'
'공백이 줄었다가 늘어났다' 구현 필요

int main() {
	int x, y;
	cout << "숫자 입력: ";
	cin >> x;
	y = 2 * x - 1;

	for (int i = 1; i <= y; i++) {
        for (int a = 1; a < x; a++) {
            cout << " ";
        }
        if (i == x) {
            cout << "*";
        }
        for (int c = y; c > x; c--) {
            cout << " ";
        }
        cout << endl;
	}
    return 0;
}

  • 3단계 코드
    2단계에선 맨 가운데 * 하나만 있는 모습.

이제부턴 정답 코드를 참고해서 분석해보기로

int main() {
    int num;

    // 사용자로부터 입력 받기
    cout << "다이아몬드의 크기를 입력하세요 (양의 정수): ";
    cin >> num;

    // 다이아몬드 상단 출력
    for (int i = 1; i <= num; ++i) {
        // 공백 출력
        for (int j = 1; j <= num - i; ++j) {
            cout << " ";
        }
        // 별 출력
        for (int k = 1; k <= 2 * i - 1; ++k) {
            cout << "*";
        }
        cout << endl; // 줄 바꿈
    }

    // 다이아몬드 하단 출력
    for (int i = num - 1; i >= 1; --i) {
        // 공백 출력
        for (int j = 1; j <= num - i; ++j) {
            cout << " ";
        }
        // 별 출력
        for (int k = 1; k <= 2 * i - 1; ++k) {
            cout << "*";
        }
        cout << endl; // 줄 바꿈
    }

    return 0;
}

구조 자체를 잘못 이해한 부분이 있어
코드 작성에 어려움이 있었다

우선 '상단부 로직'의 경우,
입력된 숫자(편의상 4 로 가정)만큼 4번 반복하는데,
4번 뭘 반복하냐면:
공백 3번 + 별 1번
공백 2번 + 별 3번
공백 1번 + 별 5번
별 7번
~이렇게 되는 식이다.

최초 구상 단계에서 생각한:
공백 입력 3번 + 별 1번 + 공백 3번
이런식으로 나오는 게 아니었던 것

물론 아마 이렇게도 만들 수 있을 것

그리고 뒤이어서 '하단부 로직'이
3번 반복하는데:
(이번엔 조건이 감소식이라서)
공백 1번 + 별 5번
공백 2번 + 별 3번
공백 3번 + 별 1번
~이 되는 식

확실히 수학적 사고가 중요해지는 느낌

처음 예시를 봤을 때

이렇게 나오는 거라고 생각했어야 했다

0001
00111
011111
1111111
011111
00111
0001

profile
내일배움캠프 Unreal 3기

0개의 댓글