import java.util.Scanner;
public class Main {
static char array[][];
public static void main(String[] args) {
Scanner inputValue = new Scanner(System.in);
int N = inputValue.nextInt();
array = new char[N][N];
star(N, 0, 0, false);
StringBuilder sb = new StringBuilder();
// 단순 출력문
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sb.append(array[i][j]);
}
sb.append('\n');
}
System.out.print(sb);
}
static void star(int N, int row, int column, boolean blank) {
int N_blockSize = N/3;
int count=0;
if ( blank == true ) {
for (int r=row; r < row + N; r++) {
for(int c=column; c < column + N ; c++) {
array[r][c]=' ';
}
}
return; //리턴 꼭 해줘야함
}
if (N==1) {
array[row][column]='*';
return; //리턴 꼭 해줘야함
}
for (int i=row; i< N+row; i= i+N_blockSize) {
// N_blockSize == 전체 N을 기준으로 봤을 때 블록(*)의 단위임
// N = 27 일 경우 블록이 9개로 나뉨 ( 블록당 9x9를 하나의 별(*) 로 봄)
// N = 9 일 경우 블록이 9개로 나뉨 (블록 당 3x3 블록을 하나의 별(*)로 봄)
// N = 3 일 경우 블록이 9개로 나뉨(블록 당 하나의 별(*) )
for(int j=column; j< N+column ; j= j+N_blockSize) {
// j= j+N_blockSize --> 빈칸의 시작 주소를 의미하는 것
count++;
if(count==5) {
// count가 5일 경우의 의미 = 3x3에서 빈칸을 의미함 (행렬 1,1)
star(N_blockSize, i, j, true);
}
else {
star(N_blockSize, i, j, false);
}
}
}
}
}
반응형
'알고리즘 문제 풀이 > 백준 별찍기' 카테고리의 다른 글
(2446)별 찍기 -9 (자바) (0) | 2022.01.19 |
---|---|
(2445)별 찍기 -8 (자바) (0) | 2022.01.19 |
(2443)별 찍기 - 6 (자바) (0) | 2022.01.18 |
(2442)별 찍기 - 5 (자바) (0) | 2022.01.18 |
댓글