반응형
이번에는 2개의 문제를 합쳐서 피라미드를 만들어 보자.
1, 3, 5, 7
1부터 2씩 증가하여 별을 가운데 정렬하는 구조이다.

*
***
*****
*******
*********

문제 핵심

  • 1 <= N <= 100
  • 2 * N - 1 개의 별을 찍어낸다고 한다.
  • 가운데 정렬로 별을 1부터 2씩 증가하여 출력하여 피라미드를 만들어 내는 구조

풀이 과정

별 찍기 1과 같이 이차원 배열을 통해 그려나가는 방식이 있고, 공백의 개수와 별의 개수의 규칙을 찾아 그려나갈 수 있다.

 

다음 풀이는 규칙을 찾아 문제를 풀어나가는 경우이다.

1. N이 5일 때 공백의 개수는 N - 1, N - 2, ..., 0개이다.

2. 이 때 별의 개수는 1부터 시작하여 2개씩 더해진다. 즉 홀수로 진행된다.

3. 각각의 층은 N, N + 1, N + 2, ..., N * 2 - 1로 증가된다.

4. 1부터 N + i까지 항상 반복하면 i값에 따라 3번의 조건을 만족하고 j < N - i값에 따라 공백은 점차 줄어들게 된다.

5. 나머지를 별로 채움으로써 피라미드처럼 나오게 된다.

for (int i = 0; i < N; i++) {
    for (int j = 1; j <= N + i; j++) {
        if(j < N - i) {
            stringBuilder.append(' ');
        }
        else {
            stringBuilder.append('*');
        }
    }
    stringBuilder.append('\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 N = Integer.parseInt(br.readLine());
        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < N; i++) {
            for (int j = 1; j <= N + i; j++) {
                if(j < N - i) {
                    stringBuilder.append(' ');
                }
                else {
                    stringBuilder.append('*');
                }
            }
            stringBuilder.append('\n');
        }

        System.out.println(stringBuilder);
    }
}
반응형

+ Recent posts