별 찍기 - 10 2447

PublicMinsu·2023년 5월 22일
0

문제

접근 방법

구역을 나눌 수 있다.
한 구역을 기준으로 9개의 구역으로 나뉘는데 가운데를 제외한 8구역은 반복되는 모습을 볼 수 있다.
가운데에 표시를 해주고 나머지 9역을 재귀적으로 접근하면 된다.

코드

#include <iostream>
#include <vector>
using namespace std;
vector<vector<char>> map;
int N;
void part(int sX, int eX, int sY, int eY)
{
    if (eX - sX == 1)
        return;
    int gapX = (eX - sX) / 3, gapY = (eY - sY) / 3;
    for (int i = sY + gapY; i < eY - gapY; ++i)
        for (int j = sX + gapX; j < eX - gapX; ++j)
            map[i][j] = ' ';

    for (int i = sY; i < eY; i += gapY)
        for (int j = sX; j < eX; j += gapX)
        {
            part(j, j + gapX, i, i + gapY);
        }
}
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> N;
    map = vector<vector<char>>(N, vector<char>(N, '*'));
    part(0, N, 0, N);
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
            cout << map[i][j];
        cout << "\n";
    }
    return 0;
}

풀이

3의 제곱만큼의 크기로 존재하기에 3으로 나누어서 분할해 줘도 된다.

profile
연락 : publicminsu@naver.com

0개의 댓글