[白俊2447]星図-10(正解率52%)


質問する
再帰的なパターンで星を撮りましょう.Nは3の累加二乗(3,9,27.)である.表示、大きさNのパターンはN×n正方形形状.
大きさ3のパターンは真ん中にスペースがあり、真ん中のすべての格子を除いて星のパターンがあります.

nが3より大きい場合、nサイズのパターンはスペースで塗りつぶされます(N/3).×(N/3)N/3の大きさのパターンで囲まれた正方形.例えば、サイズ27のパターンは、サンプル出力1と同じである.
入力
1行目はNです.Nは3の三次方です.すなわち、ある整数kに対して、N=3 kであり、このとき1≦k<8である.
しゅつりょく
1行目からN行目まで星を出力します.
入力例
27
サンプル出力1

解答方法

上記のように分割し、星を適用するためにコードを再帰的に記述する
各インスタンスに3 x 3サイズで別々に適用し、すべての再帰が完了したら、String Builderを使用して文字列出力にマージします.
public static void main(String[] args) throws IOException {
        int N;
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(bf.readLine());
        arr = new char[N][N];

        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                arr[i][j]=' ';
            }
        }


        DNC(0, 0, N);


        for (int i = 0; i < N; i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < N; j++) {
                sb.append(arr[i][j]);
            }
            System.out.println(sb.toString());

        }
    }

    static void DNC(int x, int y, int n) {
        int div = n / 3;

        if (n == 3) {
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    if (i == 1 && j == 1) {
                        arr[x + i][y + j] = ' ';
                        continue;
                    }
                    arr[x + i][y + j] = '*';
                }
            }
            return;
        }

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == 1 && j == 1) {
                    continue;
                }
                DNC(x + i * div, y + j * div, div);
            }
        }
    }
他人の答え

各行は、インデックスi,jをチェックし、行ごとに出力する方法である.
時間的複雑さを著しく低減する利点がある.