#include <iostream>
#include <vector>
using namespace std;
char board[2200][2200];
void pattern(int y, int x, int size){
if(size == 0) return;
for(int i=y+size/3;i<y+size/3+size/3;i++)
{
for(int j=x+size/3;j<x+size/3+size/3;j++)
{
board[i][j] = ' ';
}
}
int one = size/3;
int two = size/3 + size/3;
pattern(y, x, size/3);
pattern(y+one, x, size/3);
pattern(y+two, x, size/3);
pattern(y, x+one, size/3);
pattern(y, x+two, size/3);
pattern(y+one, x+two, size/3);
pattern(y+two, x+one, size/3);
pattern(y+two, x+two, size/3);
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0;i<N;i++)
fill(board[i], board[i]+N, '*');
pattern(0, 0, N);
for(int i=0;i<N;i++)
cout << board[i]<<'\n';
return 0;
}
- 원리
1) 일정 구역에서 항상 중간에 해당되는 부분은 ' '값을 가지도록 저장
(y와 x의 범위가
y+size/3 ~ y+size/3+size/3
x+size/3 ~ x+size/3+size/3
일 때 항상 ' '값을 가짐)
2) 가운데 부분을 제외하고 나머지 8부분
에 대해 재귀 수행
- 다른 풀이는 ?
: ' ' 값을 가지는 좌표들의 특징을 찾아서 해결함
(y/size%3 == 1 && x/size%3 == 1
일 때 공백임!)