관리자 글쓰기
[백준] 10994번 : 별 찍기 - JAVA
2024. 11. 14. 14:04 - DoosanBaek

문제분석 :

-  n 값에 따라 일정한 규칙을 가진 별(*) 패턴을 출력

- n이 주어지변, 출력할 별 패턴은 크기가 4*n -3 인 정사각형 형태

- 중앙을 기준으로 별 테두리와 공백을 가지고, 가장 바깥쪽 테두리부터 안쪽으로 들어가면서 별 테두리 그린다.

- 재귀적으로 줄어드는 패턴

제약조건 :

- 첫번째 줄에 n이 주어진다. ( 1 <= n <= 100 )

- 백준 적정 시간내 출력되야된다

의사결정 :

- n 값을 읽을때 BufferdReader 의 readLine() 함수를 사용한다.

- 출력할 패턴의 배열을 초기화한다. 4 * n - 3 크기의 배열을 생성하고, 공백으로 초기화한다.

- 별 패턴을 재귀적으로 작성 한다.

- 배열을 출력 한다.

 

package com.doosane.study01.week01.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Week02_01_BOJ_10994 {
    static char[][] arr;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int size = 4 * n - 3;

        arr = new char[size][size];

        // 배열을 공백으로 초기화
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                arr[i][j] = ' ';
            }
        }

        // 재귀적으로 별을 찍음
        drawStar(0, 0, size);

        // 배열을 출력
        printArray(size);
    }

    static void drawStar(int x, int y, int size) {
        if (size < 1) return;

        for (int i = 0; i < size; i++) {
            arr[x + i][y] = '*';           // 왼쪽 라인
            arr[x][y + i] = '*';           // 위쪽 라인
            arr[x + size - 1][y + i] = '*'; // 아래쪽 라인
            arr[x + i][y + size - 1] = '*'; // 오른쪽 라인
        }

        drawStar(x + 2, y + 2, size - 4);
    }

    // 배열 출력
    static void printArray(int size) {
        StringBuilder sb = new StringBuilder(); 

        for (int i = 0; i < size; i++) {
            sb.append(arr[i]);
            sb.append("\n");
        }

        System.out.print(sb.toString());
    }
}