본문 바로가기
알고리즘 문제 풀이/백준 별찍기

별 찍기 - 10(2447)

by kakk789 2022. 1. 23.
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

댓글