[JAVA] 백준 2442번 (별찍기 -5)

문제: 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, …, N번째 줄에는 별 2×N-1개를 찍는 문제. 별은 가운데를 기준으로 대칭이어야 한다.

입력: 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력: 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

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 = 1; i <= num; i++) {
            for (int j = i; j < num; j++) {
                sb.append(" ");
            }
            for (int k = 1; k <= (2*i)-1; k++) {
                sb.append("*");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

흐름

  1. 별을 입력받을 BufferedReader
  2. 전체를 반복할 for문 (입력값(count)만큼 반복)
  3. 빈칸을 받을 for문
  4. 별을 받을 for문 ?. 빈칸을 받을 for문 -> 별 뒤에는 어차피 공백이기 때문에 굳이 빈칸을 입력 받을 필요가 없다.

별을 찍는 공식 문제를 보면 ‘2×N-1’이라고 친절하게 나와있다.. 그것도 모르고 혼자 머리를 싸매고 있었던..

빈칸을 찍는 예시 n = 5 i = 1 -> 4 (n - 1) i = 2 -> 3 (n - 2) i = 3 -> 2 (n - 3) i = 4 -> 1 (n - 4) i = 5 -> 0 (n - 5) -> 빈칸 공식 : n-(n-i) 이라고 생각했으나…생각해보니 그냥 i번 만큼 찍는 거였다..

조건식

빈칸 받는 for문
i가 1일 때 빈칸은 1개만 받아야 한다
따라서 j는 i와 개수가 같아야하고 num(입력값)보다 크면 안된다