[伯俊-JAVA]在帰-Silver 1星切り-10(2447)


質問する


[伯俊-JAVA]在帰-Silver 1星切り-10



に答える

  • 再帰関数
  • を用いる.
  • まず、星文字を含むchar 2次元配列に空白を追加します.
  • サイズと開始位置をパラメータとする再帰関数func()を作成します.
  • サイズを3 by 3に分割し、各セルで1/3サイズの再帰関数を呼び出します.
  • このとき、中間の空の位置はスキップされ、再帰関数が呼び出される.
  • サイズが1の場合、該当する格子に「*」を入れます.
  • import java.io.*;
    
    public class BOJ_2447 {
    
    	// 별 저장할 배열 
    	static char[][] star;
    	
    	static void func(int n, int x, int y) {
    		if(n == 1) {
    			star[x][y] = '*';
    			return;
    		}
    		n /= 3;
    		for(int i = 0 ; i < 3 ; i++) {
    			for(int j = 0 ; j < 3 ; j++) {
    				if(i == 1 && j == 1)
    					continue;
    				func(n, i * n + x, j * n + y);
    				
    			}
    		}
    	}
    	
    	public static void main(String[] args) throws NumberFormatException, IOException {
    		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    		StringBuilder sb = new StringBuilder();
    		int N = Integer.parseInt(in.readLine());
    		star = new char[N][N];
    		
    		for(int i = 0 ; i < N ; i++) {
    			for(int j = 0 ; j < N ; j++) {
    				star[i][j] = ' ';
    			}
    		}
    		func(N, 0, 0);
    		
    		for(int i = 0 ; i < N ; i++) {
    			for(int j = 0 ; j < N ; j++) {
    				sb.append(star[i][j]);
    			}
    			sb.append("\n");
    		}
    		System.out.println(sb);
    	}
    }