이 문제에서는 이 전 문제와는 조금 다르게 생각해야한다. 이 문제에서는 모든 줄에는 출력이 들어가야 한다. 이 전 문제에서는 별만 찍는것을 생각하였다면, 여기서는 공백또한 출력을 해주어야한다. 공백또한 출력의 대상이란 것을 생각하고 문제를 풀어보자.
첫 번째 줄을 보면 공백 4칸 + 별 1칸인 것을 볼 수 있다.
아래로 내려갈 수록 공백은 감소하고 별은 증가하여 출력되고있다. 이 문제를 내부 for문에서 두 분류로 나누어 출력한다. 하나는 공백을, 다른 하나는 별을 찍는 것이다. 잊지말아야할 것은 외부 for문은 줄 수를 내부 for문은 한 줄에 찍힐 내용을 담당하는 것이다.
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 N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
// for(int i = 0; i < N; i++) {
// for(int j = N; j > i + 1; j--) {
// System.out.print(" ");
// }
// for(int j = 0; j <= i; j++) {
// System.out.print("*");
// }
// System.out.println();
// }
int star = 1;
for(int i = N - 1; i >= 0; i--) {
for(int j = 0; j < i; j++) {
sb.append(" ");
}
for(int j = 0; j < star; j++) {
sb.append("*");
}
sb.append("\n");
star++;
}
System.out.println(sb);
}
}
2가지로 문제를 해결하였다.
가장 바깥 for loop에서는 N만큼 순회하며,
내부 for loop에서는 2가지 for문을 만든다.
하나는 N으로 초기 할당한 j를 i 보다 작을 때까지 돌며
빈 공백을 출력하고, 다른 하나는 0으로 초기 할당한 j를 i 보다 작거나
같을 때까지 별을 출력한다.
for(int i = 0; i < N; i++) {
for(int j = N; j > i + 1; j--) {
System.out.print(" ");
}
for(int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
다른 하나는 출력해야하는 별의 숫자를 변수로 만들어 출력하는 것이다.
변수는 for loop값이 하나씩 증가할때마다, 별의 숫자를 1 증가시킨다.
빈 공백은 j =0으로 초기화하고 바깥 loop i보다 작을 때 까지 출력한다.
int star = 1;
for(int i = N - 1; i >= 0; i--) {
for(int j = 0; j < i; j++) {
sb.append(" ");
}
for(int j = 0; j < star; j++) {
sb.append("*");
}
sb.append("\n");
star++;
}
System.out.println(sb);