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;
}