문제
N이 주어지면 오른쪽 정렬된 모래시계 형태의 별 패턴을 출력한다. 1개부터 N개까지 늘어난 뒤 다시 줄어든다.
입력
첫째 줄에 N (1 ≤ N ≤ 100)이 주어진다.
출력
2*N-1줄에 걸쳐 별을 출력한다.
예제
| 입력 | 출력 |
|---|---|
3 | * ** *** ** * |
풀이
윗부분(별이 1N개로 증가)과 아랫부분(별이 N-11개로 감소)으로 나누어 오른쪽 정렬 패턴을 출력한다.
- 윗부분: i행에서 (N-i)개의 공백 후 i개의 별을 출력한다 (i: 1→N)
- 아랫부분: i행에서 i개의 공백 후 (N-i)개의 별을 출력한다 (i: 1→N-1)
- StringBuilder로 모아 한 번에 출력한다
핵심 아이디어: 각 행의 공백 수 = N - 해당 행의 별 수로 계산하여 오른쪽 정렬 효과를 낸다.
코드
package day699;
import java.io.*;
public class Day652BOJ2522별찍기12 {
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 = n - i; j > 0; j--)
sb.append(" ");
for (int j = 1; j <= i; j++)
sb.append("*");
sb.append("\n");
}
for (int i = 1; i <= n - 1; i++) {
for (int j = 1; j <= i; j++)
sb.append(" ");
for (int j = 1; j <= n - i; j++)
sb.append("*");
sb.append("\n");
}
System.out.print(sb);
}
}복잡도
- 시간: O(N^2)
- 공간: O(N^2)