알고리즘/백준

[백준][C++] 2448: 별 찍기 - 11

KANTAM 2023. 10. 4. 19:29

문제

풀이

  • 전체 별이 그려질 공간을 보면 [3100][6200] 정도가 된다. 받은 N값에 따라 별이 그려질 공간을 분할한다. 

  • 이 구조의 별을 해당 위치에 그리는 방법으로 해결한다.

코드

#include <iostream>

using namespace std;

int N;
char ground[3100][6200];
char star[3][6] =
{
    "  *  ",
    " * * ",
    "*****"
};

void insertStar(int n, int x, int y)
{
    // 계속 쪼개서 n이 1이라면 별을 입력
    if (n == 1)
    {
        for (int i = 0; i < 3; ++i)
        {
            for (int j = 0; j < 5; ++j)
            {
                ground[x + i][y + j] = star[i][j];
            }
        }

        return;
    }

    insertStar(n / 2, x, y + 3 * n / 2);
    insertStar(n / 2, x + 3 * n / 2, y);
    insertStar(n / 2, x + 3 * n / 2, y + 3 * n);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> N;

    insertStar(N / 3, 0, 0);

    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < 2 * N - 1; ++j)
        {
            if (ground[i][j] == '*')
            {
                cout << '*';
            }
            else
            {
                cout << " ";
            }
        }
        cout << endl;
    }

    return 0;
}