먼저 구간별로 반복되는 형태를 찾아 반복되는 로직을 정했다.
찾다보니 삼각형이 반복되는 것을 알 수 있었고, 그 좌표의 규칙을 찾아
재귀로 반복시켰다!
재귀
O(N^2)
처음 로직을 떠올리는게 오래걸렸다..
없을 것 같다!
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int size = (int)Math.pow(2,N)*3;
String[][] arr = new String[N][N*2];
for (int i = 0; i < arr.length; i++) {
Arrays.fill(arr[i], " ");
}
makeStar(N,0,N,arr);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 0; i < arr.length; i++) {
for (int j = 1; j < arr[i].length; j++) {
bw.write(arr[i][j]);
}
bw.newLine();
}
bw.flush();
bw.close();
}
static void makeStar(int h,int y, int x,String[][]arr){
if(h<3)return;
if(h==3){
printStar(h, y, x,arr);
}
makeStar(h/2,y,x,arr);
makeStar(h/2,y+h/2,x+h/2,arr);
makeStar(h/2,y+h/2,x-h/2,arr);
}
static void printStar(int h, int y, int x,String[][]arr){
arr[y][x] ="*";
arr[y+1][x-1]="*";
arr[y+1][x+1]="*";
for (int i = 0; i < 5; i++) {
arr[y+2][x-2+i]="*";
}
}
}