단계별로 풀어보기 > 심화 1 > 별찍기 7
https://www.acmicpc.net/problem/2444
예제를 보고 규칙을 유추 후 별을 찍어 보기.

규칙으로 1층에 1, 2층에 3, 3층에 5 ~~의 갯수가 되므로, 층을 i층이라 가정할 때 별의 갯수는 2(i-1)+1이 된다.
또한, 공백은 주어진 값(N) - 현재 층(i) 갯수 만큼 앞에 추가 된다.
이후 주어진 값(N)층 이후에는 반복문 조건을 반대로 진행하면 된다.
import java.io.*;
public class 별찍기_7 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 1; i <= N; i++){
for(int j = 0; j < N-i; j++) sb.append(" ");
for(int j = 0; j < 2*i-1; j++) sb.append("*");
sb.append("\n");
}
for(int i = N-1; i >= 1; i--){
for(int j = 0; j < N-i; j++) sb.append(" ");
for(int j = 0; j < 2*i-1; j++) sb.append("*");
sb.append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
공백을 추가하고, 별을 추가한다는 개념을 가지고 진행하면 쉽게 풀리는 문제이다.
처음 풀이할 때는 별 찍기 이후에 어떻게 또 공백을 추가하지 생각했지만, 해당하는 조건이 없으므로, 그냥 공백 추가 후 별 추가한다. 라는 개념만 알면 편하게 풀 수 있다.
시간 복잡도는 2중 for문이 삽입 되어있으므로, O(n^2) 이다.
