본문 바로가기
알고리즘/백준

백준 2447번 - 별 찍기 - 10 (Java 8)

by latissimus 2022. 2. 27.

https://www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.regex.Pattern;

public class Main {
    static char[][] grid;
    static void makePattern(int x, int y, int N, boolean isBlank) {
        if (isBlank) {
            for (int i = x; i < x + N; i++) {
                for (int j = y; j < y + N; j++) {
                    grid[i][j] = ' ';
                }
            }
            return;
        }

        if (N == 1) {
            grid[x][y] = '*';
            return;
        }

        int size = N / 3;
        int count = 0;

        for (int i = x; i < x+N; i += size) {
            for (int j = y; j < y+N; j += size) {
                count++;
                if (count == 5) {
                    makePattern(i, j, size, true);
                } else {
                    makePattern(i, j, size, false);
                }
            }
        }

    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        grid = new char[N][N];

        makePattern(0,0, N,false);

        StringBuilder sb = new StringBuilder();



        for (char[] eachLine : grid) {
            for (char each : eachLine) {
                sb.append(each);
            }
            sb.append("\n");
        }
        System.out.print(sb);

    }
    
//혼자 막 짠 코드
//    public static char[][] makePattern(int N, char[][] grid){
//        for(int i=0; i<N; i++){
//            Arrays.fill(grid[i], '*');
//        }
//
//        return drill(N, grid);
//    }
//    public static char[][] drill(int N, char[][] grid) {
//
//
//        for(int i=0; i<grid.length; i++){
//            for(int j=0; j< grid.length; j++){
//                if(i/(N/3)%3 == 1 && j/(N/3)%3 ==1){
//                    grid[i][j] = ' ';
//                }
//            }
//        }
//        if(N == 3) return grid;
//
//        return drill(N/3, grid);
//    }
}

재귀가 계속 헷갈린다. 갈길이 멀다.

백준 단계별 문제를 검색하면 바로나오는 st-lab님의 힘을 빌렸다. 감사합니다.

https://st-lab.tistory.com/95

 

[백준] 2447번 : 별 찍기 - 10 - JAVA [자바]

www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백..

st-lab.tistory.com

 

댓글