[JAVA] 백준 2446번 별찍기 - 9

문제: 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력: 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력: 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

예제입력 : 5           예제출력
                    *********
                     *******
                      *****
                       ***
                        *
                       ***
                      *****
                     *******
                    *********
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < num; i++) {
            for (int j = 0; j < i; j++) {
                sb.append(" ");
            }
            for (int k = 0; k < 2 * num -(2 * i + 1); k++) {
                sb.append("*");
            }
            sb.append("\n");
        }
        for (int i = 0; i < num - 1; i++) {
            for (int j = 1; j < num - 1 - i; j++) {
                sb.append(" ");
            }
            for (int k = 0; k < 3 + (2 * i); k++) {
                sb.append("*");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

흐름 -`빈칸, 별’을 상부, 하부로 나눠서 for문을 돌림

빈칸 0 - 1 - 2 - 3 - 4 0부터 시작해서 n-1까지 증가했다가 3 - 2 - 1 - 0 다시 0으로 감소

별 9 - 7 - 5 - 3 - 1 k는 0부터 2n -(2i +1)까지 반복 3 - 5 - 7 - 9 k는 0부터 3+2i까지 반복

수도코드

1. br로 입력값 받아옴
2.상부 for (0부터 시작해서 n보다 작게)
    빈칸 for (0부터 i보다 작게)
     for (0부터 2n -(2i +1)보다 작게)
   하부 for (0부터 n-1보다 작게)
     빈칸 for (1부터 n-1-i보다 작게)
      for (0부터 3+2i보다 작게)