사용자로부터 정수를 입력받아,
해당 크기에 맞는 다이아몬드 모양을 *로 출력하는 프로그램
입출력 예시)
# 예시 1
입력:
4
출력:
*
***
*****
*******
*****
***
*
# 예시 2
입력:
2
출력:
*
***
*
# 예시 3
입력:
5
출력:
*
***
*****
*******
*********
*******
*****
***
*
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;
}

* 들이 한 줄이 되도록 만들어줄 필요가 있다또한 추가적으로
아래줄에도 '별이 늘어났다 줄어났다'
'공백이 줄었다가 늘어났다' 구현 필요
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;
}

이제부턴 정답 코드를 참고해서 분석해보기로
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