Dev.baelanche

[백준 2447] 별 찍기 - 10 본문

Data Structure & Algorithm/PS - JAVA

[백준 2447] 별 찍기 - 10

baelanche 2019. 5. 7. 21:20
반응형

 

 

어느 부분이 반복되는지 한 3분정도 보다가 찾아냈다.

 

***

*  *

***

 

모양을 재귀호출하면서 채워넣어주면 된다.

 

예제를 생각해보면,

1. 27*27 배열을 9*9 씩 9개로 분할한다.

2. 9개 배열 중 가운데 배열만 공백으로 채우고 나머지는 *로 채운다.

3. 9개 배열을 3*3 씩 9개로 분할한다.

4. 2번과 같이 채운다.

5. 3*3 의 배열을 채우면 정지한다.

 

위 순서대로 3^n * 3^n 의 배열에서 3등분 하는 방법으로 접근하면 된다.

 

 

public class Main {
    
    static char a[][];
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        
        a = new char[n][n];
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                a[i][j] = '*';
            }
        }
        
        recursive(0, 0, n);
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                sb.append(a[i][j]);
            }
            sb.append("\n");
        }
        System.out.println(sb.toString());
    }
    
    public static void recursive(int s, int e, int len) {
        if(len < 3) return;
        int m = len/3;
        for(int i=0; i<3; i++) {
            for(int j=0; j<3; j++) {
                if(i == 1 && j == 1) fillBlank(s + m, e + m, m);
                else recursive(s + m*i, e + m*j, m);
            }
        }
    }
    
    public static void fillBlank(int s, int e, int len) {
        for(int i=s; i<s+len; i++) {
            for(int j=e; j<e+len; j++) {
                a[i][j] = ' ';
            }
        }
    }
}
반응형

'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글

[백준 1912] 연속합  (0) 2019.05.09
[백준 2290] LCD Test  (0) 2019.05.08
[백준 1074] Z  (0) 2019.05.07
[백준 11000] 강의실 배정  (0) 2019.05.07
[백준 1931] 회의실배정  (0) 2019.05.07
Comments