문제: 첫째 줄에는 별 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(입력값)보다 크면 안된다