baekjoon

백준 2448번 : 별 찍기 - 11 자바

Meluu_ 2024. 9. 13. 21:02

 

 

 

🧫 문제 분석

 

✔️ 출처

별 찍기 - 11 골드 4

 

📖 문제

 

 

 

 

재귀로 풀어야 될거 같은 패턴 모양이다 

삼각형을 3개로 나눠서 위쪽, 아래왼쪽, 아래 오른쪽 으로 분할한다.

 

높이는 N 이고

밑변은 N * 2 - 1 이다.

 

n 이 3일 때까지 재귀로 삼각형을 분할하고

3이되면 위치에 맞게 별을 넣으면 된다. 

 

아래의 그림을 참조하면 될 것 같다. 

이 방식으로 삼각형을 분할한다.

 

 

 

처음 시도때 실수 한 것이 삼각형의 위쪽 별 위치를 재귀로 넘겨서 분할할려 했는데

인덱스 벗어나거나 하는 문제가 발생했다.

 

 

 

 


🔅 문제 풀이

import java.io.*;
import java.util.*;

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

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());
        arr = new char[n][n + n - 1];

        for (int i = 0; i < n; i++) {
            Arrays.fill(arr[i], ' ');
        }

        recursion(0, 0, n);


        for (char[] stars : arr) {
            sb.append(stars).append("\n");
        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
    }


    private static void recursion(int r, int c, int div) {

        if (div == 3) {
            arr[r][c + 2] = '*';
            arr[r + 1][c + 1] = arr[r + 1][c + 3] = arr[r + 2][c] = arr[r + 2][c + 1] = arr[r + 2][c + 2] = arr[r + 2][c + 3] = arr[r + 2][c + 4] = '*';

        }else {
            int mid = div / 2 ;

            // 위쪽 삼각형
            recursion(r, c + mid, mid);
            // 왼쪽 아래 삼각형
            recursion(r + mid, c, mid);
            // 오른쪽 아래 삼각형
            recursion(r + mid , c + div , mid);
        }
    }


}

 

 

 

❗ 오답노트 / 필요한 지식

  1. 어떻게 나누고, 어떻게 처리할지 잘 생각해보자.