[백준 2448] 별 찍기 - 11

silverCastle·2022년 1월 24일
0

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

✍️ 첫번째 접근

문제에서 나온 예제를 살펴보면

  *
 * *
*****

이러한 패턴이 반복해서 나오는데 이 성질을 이용해 재귀적으로 해결할 수 있다.
크기가 3일 때, 위의 패턴을 출력하고 크기가 3이 아니라면 현재 크기의 절반을 가지고 재귀를 돌렸다.

#include <bits/stdc++.h>
using namespace std;
char board[3100][6200];
int n;
void fill(int x, int y) {
    board[x][y] = '*';
    board[x+1][y-1] = '*';
    board[x+1][y+1] = '*';
    for(int i = 0; i < 5; i++)
        board[x+2][y-2+i] = '*';
}
void func(int s, int x, int y) {
    if(s == 3) {
        fill(x,y);
        return;
    }
    int num = s/2;
    func(num,x,y);
    func(num,x+num,y-num);
    func(num,x+num,y+num);

}
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < 2*n-1; j++) {
            board[i][j] = ' ';
        }
    }

    func(n,0,n-1);    

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < 2*n-1; j++) {
            cout << board[i][j];
        }
        cout << '\n';
    }

    return 0;
}

0개의 댓글