이번 문제는 분할 정복으로 해결하였다. 전에 풀어보았던 별 찍기보다 복잡한 형태의 문제여서 고민을 많이 했다. 출력되는 별이 많으므로 2차원 배열에 저장하기로 하였다.
star[MAX/2][MAX]
가 된다.#include <iostream>
#define MAX 2*(3072+1)
using namespace std;
int n;
char star[MAX/2][MAX];
void Input(){
cin>>n;
for(int i=0; i<n+1; i++){
for(int j=0; j<2*n; j++){
star[i][j]=' ';
}
}
}
void Solution(int h, int y, int x){
if(h==3){
star[y][x]='*';
star[y+1][x-1]='*';
star[y+1][x+1]='*';
for(int i=x-2; i<x+3; i++){
star[y+2][i]='*';
}
return;
}
else{
int nh=h/2;
Solution(nh, y, x);
Solution(nh, y+nh, x-nh);
Solution(nh, y+nh, x+nh);
}
}
void Solve(){
for(int i=0;i<n;i++){
for(int j=0; j<2*n-1; j++){
cout<<star[i][j];
}
cout<<endl;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
Solution(n, 0, n-1);
Solve();
return 0;
}