BOJ_2448_별 찍기 11_java

2022. 12. 28. 16:31Algorithm/BOJ

728x90

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

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 백준 2448 별 찍기 - 11
 골드 4
 */
public class BOJ_2448_별찍기11 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String[] map = new String[N];

        map[0] = "  *  ";
        map[1] = " * * ";
        map[2] = "*****";

        for (int k = 1; 3 * (int)Math.pow(2, k) <= N; k++) {
            drawStar(k, map);
        }

        for (int i = 0; i < N; ++i) {
            System.out.println(map[i]);
        }
    }

    private static void drawStar(int k, String map[]) {
        int nowBottom = 3 * (int)Math.pow(2, k);
        int beforeBottom = nowBottom / 2;

        for (int i = beforeBottom; i < nowBottom; i++) { // 이전에 그린 삼각형 2개 복사
            map[i] = map[i - beforeBottom] + " " + map[i - beforeBottom];
        }

        // 모든 행에 빈공간 추가
        StringBuilder sb = new StringBuilder();
        while (sb.length() < beforeBottom) {
            sb.append(" ");
        }
        for (int i = 0; i < beforeBottom; ++i) {
            map[i] = sb.toString() + map[i] + sb.toString();
        }
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

BOJ_12852_1로 만들기 2_java  (0) 2023.01.10
BOJ_14938_서강그라운드_java  (0) 2023.01.09
BOJ_13172_Σ_java  (0) 2023.01.06
BOJ_1406_에디터_java  (0) 2022.12.27
BOJ_2193_이친수_java  (0) 2022.12.22