본문 바로가기
PS/Baekjoon

[Baekjoon] 2444 - 별 찍기 - 7

by 서현 SEOHYEON 2023. 2. 28.

📝 문제

 

 

🔑 풀이 과정

별찍기 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

댓글