코딩테스트 & 문제 풀이

[C]백준_2445 : 별 찍기 - 8

Hicecream 2023. 12. 22. 16:31

2023년 2월 24일에 작성됨

 

https://www.acmicpc.net/problem/2445

 

2445번: 별 찍기 - 8

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

www.acmicpc.net

 

 

문제 분석

별, 공백, 별 순으로 해서 for문을 이용하여 출력한다.

예제 출력을 대칭이 되도록 가로로 잘랐을 때
윗 부분 - 별 개수 +1씩, 공백 -1씩
아랫 부분 - 별 개수 -1씩, 공백 +1씩
되는 규칙이 있다.

 

 

소스 코드 (⭕)

#include <stdio.h>

int main()
{
    int n, cnt1, cnt2;

    scanf("%d", &n);

    cnt1 = n;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            printf("*");
        }
        for (int k = (cnt1 - 1) * 2; k > 0; k--)
        {
            printf(" ");
        }
        cnt1 -= 1;
        for (int j = 0; j <= i; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    cnt2 = 2;
    for (int a = 0; a < n - 1; a++)
    {
        for (int b = 0; b < n - a - 1; b++)
        {
            printf("*");
        }
        for (int c = 0; c < cnt2; c++)
        {
            printf(" ");
        }
        cnt2 += 2;
        for (int b = 0; b < n - a - 1; b++)
        {
            printf("*");
        }
        printf("\n");
    }
}

 

코드 분석

1. n을 입력받고, cnt1에 n의 값을 넣어준다.

2. 예제 출력을 가로로 자른 윗 부분을 출력하기 위해 n번 반복하는 for문을 세워준다.

    2-1. i 값에 따라 1개부터 n개까지 별을 출력하는 반복문을 세워준다.

    2-2. 2*(cnt1-1)개부터 2개씩 줄어들며 공백을 출력하기 위해 cnt1을 -1씩 해준다.

    2-3. 공백 기준 오른쪽과 왼쪽의 별의 개수가 같기 때문에 2-1과 똑같은 for문을 세워주고 줄자꿈을 해준다.

3. 아랫 부분을 출력하기 위해 n-1번 반복하는 for문을 세워준다.

    3-1. n-1개부터 1씩 줄어들도록 하여 별을 출력한다.

    3-2. cnt2는 2부터 +2씩 하여 공백을 출력한다.

    3-3. 3-1과 같은 반복문을 세워주고 줄바꿈을 해주면 된다.

 

 

 

end

지금껏 풀었던 별찍기 중에 제일 어렵긴 했지만 그래도 차근차근 하니 풀 만했다!!