📝 문제
🔑 풀이 과정
별찍기 5번과 별찍기 6번을 합쳐놓은 듯한 형태.
N번째 줄까지를 위쪽, 나머지를 아래쪽으로 총 두 군데로 나눠서 생각한다.
일단 위쪽은 N = 5일 때
i번째 줄 | 공백 | * |
i = 1 | 4칸(N-i) | 1개(2i-1) |
i = 2 | 3칸(N-i) | 3개(2i-1) |
i = 3 | 2칸(N-i) | 5개(2i-1) |
i = 4 | 1칸(N-i) | 7개(2i-1) |
i = 5 | 0칸(N-i) | 9개(2i-1) |
아래쪽은 N = 5 일때
i번째 줄 | 공백 | * |
i = 1 | 1칸(i) | 7칸(2N-(2(i+1)-1)) |
i = 2 | 2칸(i) | 5칸(2N-(2(i+1)-1)) |
i = 3 | 3칸(i) | 3칸(2N-(2(i+1)-1)) |
i = 4 | 4칸(i) | 1칸(2N-(2(i+1)-1)) |
2N-(2(i+1)-1) 을 풀면
2N-2i-1
--
* 다만 아래쪽을 i=4, i=3, i=2...
라고 잡고
공백은 N-i, *은 2i-1로 하는것이 더 깔끔하다.
for문을 꼭 증가만 해야 한다고 생각하지 말자.(i를 1부터 시작해야 한다는 편견 버리기)
🔓 답안
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));
int N = Integer.parseInt(br.readLine());
for(int i = 1; i <= N; i++){
for(int j = 0; j < N-i; j++)
bw.write(" ");
for(int j = 0; j < 2*i - 1; j++)
bw.write("*");
bw.newLine();
}
for(int i = 1; i <= N-1; i++){
for(int j = 0; j < i; j++)
bw.write(" ");
for(int j = 0; j < (2*N)-(2*i)-1; j++)
bw.write("*");
bw.newLine();
}
bw.flush();
bw.close();
}
}
🖤 알고리즘 분류
- 구현
'PS > Baekjoon' 카테고리의 다른 글
[Baekjoon] 25206 - 너의 평점은 (0) | 2023.03.02 |
---|---|
[Baekjoon] 2178 - 미로 탐색 (0) | 2023.03.01 |
[Baekjoon] 2443 - 별 찍기 - 6 (1) | 2023.02.27 |
[Baekjoon] 2442 - 별 찍기 - 5 (0) | 2023.02.26 |
[Baekjoon] 10798 - 세로읽기 (0) | 2023.02.25 |
댓글