© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 2445 - 별 찍기 - 8

2023-10-07
BOJ
브론즈 III
java
원본 문제 보기
구현

문제

BOJ 2445 - 별 찍기 - 8

N이 주어지면 양쪽에서 별이 늘어나다 가운데에서 만나고, 다시 줄어드는 패턴을 출력한다.

입력

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

출력

2*N-1줄에 걸쳐 별을 출력한다. i번째 줄은 왼쪽에 min(i, 2N-i)개의 별, 가운데 공백, 오른쪽에 같은 수의 별을 출력한다.

예제

입력출력
5* * ** ** *** *** **** **** ********** **** **** *** *** ** ** * *

풀이

윗부분(1N줄)과 아랫부분(N-11줄)으로 나누어 별 패턴을 출력한다.

  1. 윗부분: i행에서 왼쪽 별 i개, 가운데 공백 2*(N-i)개, 오른쪽 별 i개를 출력한다
  2. 아랫부분: i행에서 왼쪽 별 i개, 가운데 공백 2*(N-i)개, 오른쪽 별 i개를 출력한다 (i를 N-1에서 1까지 감소)
  3. StringBuilder로 모아 한 번에 출력한다

핵심 아이디어: 대칭 패턴이므로 상단 증가 부분과 하단 감소 부분을 별도 루프로 처리한다.

코드

package day649;
 
import java.io.*;
 
public class Day610BOJ2445별찍기8 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int n = Integer.parseInt(br.readLine());
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= i; j++)
        sb.append("*");
      for (int j = 1; j <= 2 * n - 2 * i; j++)
        sb.append(" ");
      for (int j = 1; j <= i; j++)
        sb.append("*");
      sb.append("\n");
    }
    for (int i = n - 1; i >= 1; i--) {
      for (int j = 1; j <= i; j++)
        sb.append("*");
      for (int j = 1; j <= 2 * n - 2 * i; j++)
        sb.append(" ");
      for (int j = 1; j <= i; j++)
        sb.append("*");
      sb.append("\n");
    }
    System.out.print(sb);
  }
}

복잡도

  • 시간: O(N^2)
  • 공간: O(N^2)