10992번: 별 찍기 - 17
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
예제 입력 1
1
예제 출력 1
*
예제 입력 2
2
예제 출력 2
*
***
예제 입력 3
3
예제 출력 3
*
* *
*****
예제 입력 4
4
예제 출력 4
*
* *
* * *
******
풀이 .
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] starArr = new int[n + 1];
int[] spaceArr = new int[n + 1];
int cnt = 3;
for(int i = 2; i <= n; i++) {
starArr[i] = cnt;
spaceArr[i] = cnt - 2;
cnt += 2;
}
// 첫번째 줄
for(int i = 1; i <= n - 1; i++) sb.append(" ");
sb.append("*\n");
// (2 ~ n-1)번째 줄
for(int i = 2; i <= n - 1; i++) {
// 먼저 공백 쭉
for(int j = n - i; j >= 1; j--) sb.append(" ");
// "* 공백 쭉 *"
sb.append("*");
for(int j = 1; j <= spaceArr[i]; j++) sb.append(" ");
sb.append("*\n");
}
// n번째 줄
for(int i = 1; i <= starArr[n]; i++) sb.append("*");
bw.write(sb.toString());
br.close();
bw.flush();
bw.close();
}
}
예시들을 보고 반복문의 역할을 어떻게 나눌 것인지가 중요
세 개의 큰 반복문으로 나누었다.
1. 첫번째 줄을 찍는 반복문
2. 2~n-1번째 줄을 찍는 반복문
3. n번째 줄을 찍는 반복문
n이 1, 2일 때는 별 사이에 연속적인 공백이 들어가는 줄이 없다.
그래서 두 특수케이스 n=1일때 3으로만 처리, n=2일때 1, 3으로만 처리하도록 하고 나머지는 1, 2, 3으로 해결하도록 했다.
2~n-1번째 줄들에서 별 사이에 들어가는 공백의 수는 1부터 시작해 2개씩 늘어나는 규칙을 이용했다.
'알고리즘 문제 > 백준 온라인 저지' 카테고리의 다른 글
[BOJ] 11726 - 2×n 타일링 JAVA (0) | 2021.01.11 |
---|---|
[BOJ] 1463 - 1로 만들기 JAVA (0) | 2021.01.10 |
[BOJ] 10991 - 별 찍기 - 16 JAVA (0) | 2021.01.09 |
[BOJ] 2522 - 별 찍기 - 12 JAVA (0) | 2021.01.09 |
[BOJ] 2446 - 별 찍기 - 9 JAVA (0) | 2021.01.09 |