별 찍기 - 11

hyeongjun Jo·2022년 11월 22일
0

Backjoon

목록 보기
4/24

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

문제

풀이

  *  
 * *
***** 

와 빈공간을 자연스럽게 섞어 문제를 풀 수 있다.

코드

for (int i = middle; i < height; i++) {
            map[i] = map[i - middle] + " " + map[i - middle];
}
  • middle : 이전 삼각형의 높이
  • height : 현재 삼각형의 높이

이전에 작은 삼각형을 공백 하나를 사이에 두고 복사함

//이전 배열에 빈 공간 추가
        String space = "";
        while (space.length() < middle) {
            space += " ";
        }
        for (int i = 0; i < middle; ++i) {
            map[i] = space + map[i] + space;
        }

이전에 작은 삼각형 왼쪽과 오른쪽에 공백을 추가함

전체코드

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();

        String map[] = new String[n];
        map[0] = "  *  ";
        map[1] = " * * ";
        map[2] = "*****";

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

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

    private static void makeBigStar(int k, String map[]) {
        int height = 3 * (int)Math.pow(2, k);
        int middle = height / 2;

        for (int i = middle; i < height; i++) {
            map[i] = map[i - middle] + " " + map[i - middle];
        }

        //이전 배열에 빈 공간 추가
        String space = "";
        while (space.length() < middle) {
            space += " ";
        }
        for (int i = 0; i < middle; ++i) {
            map[i] = space + map[i] + space;
        }
    }
}
profile
DevOps Engineer

0개의 댓글