Baekjoon Review

[Gold 5] 2447 별 찍기 - 10

hanseongbugi 2024. 9. 14. 17:21

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

 

별은 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태로 출력해야한다.

이는 가운데인 경우 별 패턴을 출력하지 않는 것이고 가운데가 아닌 경우 별 패턴을 출력하면 된다.

 

별을 출력할 떄는 가운데인 경우 공백을 출력하고 아닌 경우 별을 출력한다.

출력을 위해 area에 맞게 별과 공백을 배열에 삽입한다.

 

별을 그리기 위해 9개로 영역을 나눈다.

영역을 9개로 나누기 위해 area/3을 진행하고 시작 위치와 끝 위치를 알려준다.

가운데를 나타내기 위해 가운데에 해당하는 경우 pattern 값을 false를 준다.

 

#include <iostream>
using namespace std;

int N;
char star[6600][6600];
void makeStar(int y, int x, int area, bool pattern){
    if(area == 3){
        if(pattern){
            for(int i = y;i<area + y;i++){
                for(int j = x;j<area + x;j++){
                    if(i == (y + 1) && j == (x + 1))
                        star[i][j] = ' ';
                    else
                        star[i][j] = '*';
                }
            }
        }
        else{
            for(int i = y;i<area + y;i++){
                for(int j = x;j<area + x;j++){
                    star[i][j] = ' ';
                }
            }
        }
    }
    else{
        makeStar(y, x, area/3, pattern);
        makeStar(y + area/3, x, area/3, pattern);
        makeStar(y + area/3 + area/3, x, area/3, pattern);
        
        makeStar(y, x + area/3, area/3, pattern);
        makeStar(y + area/3, x + area/3, area/3, false);
        makeStar(y + area/3 + area/3, x + area/3, area/3, pattern);
        
        makeStar(y, x + area/3 + area/3, area/3, pattern);
        makeStar(y + area/3, x + area/3 + area/3, area/3, pattern);
        makeStar(y + area/3 + area/3, x + area/3 + area/3, area/3, pattern);
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin>>N;
    makeStar(0, 0, N, true);

    for(int i = 0;i<N;i++){
        for(int j = 0;j<N;j++)
            cout<<star[i][j];
        cout<<'\n';
    }
}