본문 바로가기
💎 백준/🎇 C언어

[C언어] 백준 2444번 별 찍기 - 7

by mildliner 2024. 2. 6.

별 찍기 - 7

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

 

입력

 

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

 
출력

 

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

예제 입력 1
5

 

예제 출력 1
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
제출 코드
#include <stdio.h>

int main() {
    int n; // 다이아몬드의 중앙에서 별의 최대 개수를 결정할 변수
    scanf("%d", &n); // 사용자로부터 n을 입력받음
    int m = 2 * n - 1; // 다이아몬드의 가장 넓은 줄에 있는 별의 개수

    // 다이아몬드의 상단을 그리는 반복문
    for (int i = 0; i < n; i++) {
        // 각 줄의 시작에서 필요한 공백을 출력
        for (int j = i; j < n - 1; j++)
            printf(" ");
        // 그 줄에 해당하는 별의 개수를 출력
        for (int j = 0; j < 2*i + 1; j++)
            printf("*");
        printf("\n"); // 한 줄이 끝날 때마다 줄바꿈
    }

    // 다이아몬드의 하단을 그리는 반복문
    for (int i = 0; i < n - 1; i++) {
        // 각 줄의 시작에서 필요한 공백을 출력
        for (int j = n; j > n - 1 - i; j--)
            printf(" ");
        // 그 줄에 해당하는 별의 개수를 출력
        for (int j = m - 1; j > 2*i + 1; j--)
            printf("*");
        printf("\n"); // 한 줄이 끝날 때마다 줄바꿈
    }
    return 0;
}

 

간소화 코드
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n); // 사용자로부터 n 입력 받음

    // 전체 다이아몬드를 그리는 반복문
    for (int i = -n + 1; i < n; i++) {
        // 현재 줄에서 필요한 공백의 개수를 계산하고 출력
        int absI = i < 0 ? -i : i; // i의 절대값 계산
        for (int j = 0; j < absI; j++)
            printf(" ");
        // 현재 줄에서 출력할 별의 개수 계산하고 출력
        int stars = 2 * (n - absI) - 1;
        for (int j = 0; j < stars; j++)
            printf("*");
        printf("\n"); // 줄바꿈으로 한 줄을 마무리
    }

    return 0;
}