알고리즘 문제 풀이/백준 별찍기
별 찍기 - 10(2447)
kakk789
2022. 1. 23. 22:32
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);
}
}
}
}
}
반응형