[백준] 별 찍기 - 10

장철현·2023년 11월 24일
0

백준

목록 보기
26/80

링크

별 찍기 - 10

문제

풀이

도움받은 링크
위 링크를 통해 힌트를 얻었다

위와 같은 3x3이 반복된다. 그래서 재귀를 통해 점점점 작게 들어간다
예를 들어 27이면
9 9 9
9 9 9
9 9 9
이고 각각이
3 3 3
3 3 3
3 3 3
이 된다고 생각하면 된다

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;

public class Main {
    public static String[][] map;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());
        map = new String[n][n];

//        int k = 0;
//        while(true){
//            if(Math.pow(3, k) == n){
//                break;
//            }
//
//            k++;
//        }

        recursive(0, 0, n, true);

        for(int i=0;i<map.length;i++){
            for(int j=0;j<map.length;j++){
                bw.write(map[i][j] + "");
            }
            bw.write("\n");
        }

        bw.flush();

    }

    public static void recursive(int x, int y, int k, boolean paint){
        if(k == 3){
//            System.out.println("-------------------------------");
//            System.out.println("x = " + x + ", y = " + y + ", paint = " + paint);
//            System.out.println("-------------------------------");

            int count = 0;
            for(int i=x;i<x+3;i++){
                for(int j=y;j<y+3;j++){
                    if(paint && count != 4){
                        map[i][j] = "*";
                    } else{
                        map[i][j] = " ";
                    }

                    count++;
                }
            }
            return;
        }


        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if(i == 1 && j == 1){
                    recursive(x + (i * (k/3)) , y + (j * (k/3)), k/3, false);
                } else{
                    recursive(x + (i * (k/3)) , y + (j * (k/3)), k/3, paint);
                }
//                System.out.println("x = " + (x + (i * (k/3))) + ", y = " + (y + (j * (k/3))));
//                System.out.println("paint = " + paint);
//                map[(x + (i * (k/3)))][(y + (j * (k/3)))] = 1;
            }
        }

    }


}

0개의 댓글