도움받은 링크
위 링크를 통해 힌트를 얻었다
위와 같은 3x3이 반복된다. 그래서 재귀를 통해 점점점 작게 들어간다
예를 들어 27이면
9 9 9
9 9 9
9 9 9
이고 각각이
3 3 3
3 3 3
3 3 3
이 된다고 생각하면 된다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class Main {
public static String[][] map;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
map = new String[n][n];
// int k = 0;
// while(true){
// if(Math.pow(3, k) == n){
// break;
// }
//
// k++;
// }
recursive(0, 0, n, true);
for(int i=0;i<map.length;i++){
for(int j=0;j<map.length;j++){
bw.write(map[i][j] + "");
}
bw.write("\n");
}
bw.flush();
}
public static void recursive(int x, int y, int k, boolean paint){
if(k == 3){
// System.out.println("-------------------------------");
// System.out.println("x = " + x + ", y = " + y + ", paint = " + paint);
// System.out.println("-------------------------------");
int count = 0;
for(int i=x;i<x+3;i++){
for(int j=y;j<y+3;j++){
if(paint && count != 4){
map[i][j] = "*";
} else{
map[i][j] = " ";
}
count++;
}
}
return;
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(i == 1 && j == 1){
recursive(x + (i * (k/3)) , y + (j * (k/3)), k/3, false);
} else{
recursive(x + (i * (k/3)) , y + (j * (k/3)), k/3, paint);
}
// System.out.println("x = " + (x + (i * (k/3))) + ", y = " + (y + (j * (k/3))));
// System.out.println("paint = " + paint);
// map[(x + (i * (k/3)))][(y + (j * (k/3)))] = 1;
}
}
}
}