import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Star {
static char[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
map = new char[N][2*N-1];
for (int i = 0; i < N; i++) {
Arrays.fill(map[i], ' ');
}
Star(0,N-1,N);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
for (int j = 0; j < 2*N-1; j++) {
sb.append(map[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
}
public static void Star(int row,int col,int size) {
if(size==3) {
map[row][col] = '*';
map[row+1][col-1] = map[row+1][col+1]='*';
map[row+2][col-2] = map[row+2][col-1] = map[row+2][col]=map[row+2][col+1]=map[row+2][col+2]='*';
}
else {
Star(row,col,size/2);
Star(row+size/2,col-size/2,size/2);
Star(row+size/2,col+size/2,size/2);
}
}
}
이러한 삼각형은 기본형인 아래 삼각형이 여러개 모여 만들어졌다.
또한 각 꼭지점을 기준으로 3영역으로 분할하면 같은 삼각형이 되는데
이를 계속 나누다 보면 기본형 삼각형이 될때까지 나눌 수 있다.
즉, 분할정복 방식으로 풀 수 있다.
📢주의 char형 배열에 모두 공백으로 초기화 시켜줘야 한다.
아니면 null값이기 때문에 출력은 똑같이 나오지만 내부적으로 다르기 때문.
print문을 배열에 찍는것이 유리하다는 것을 알았다.
분할정복 방법으로 푸는것에 익숙해져야겠다.