백준 단계별 풀이

[ 백준 2438번 문제 ] 별 찍기 - 1 - JAVA

anycoding 2025. 6. 10. 22:03
반응형

 

단계적 풀이라는 카테고리를 달고 운영함으로써
본래의 의미를 지키기 위해 별 찍기 - 10 문제를 포스팅 하려고 했으나
레벨 문제로 존재하기 때문에 1 ~ 10까지 포스팅 해보려고 한다.
별 찍기를 통해 우리의 뇌를 다시 깨어보자. 

 

문제 핵심

    • 1 <= N <= 100
    • 1개부터 N개까지 별을 차례로 출력

풀이 과정 1

다음과 같은 2중 반복문으로 그릴 수 있다.

1. 1부터 N까지 5개의 라인을 그리는 반복문

2. 라인에서 별을 그려내는 반복문

for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= i; j++) {
        str.append("*");
    }
    str.append("\n");
}

 

이는 출력물이 다음과 같이 나타난다.

물론 틀렸다는 것은 아니지만 다음방법으로도 생각해보는 것이 좋겠다.


풀이 과정 2

다음 코드를 통해 N * N 크기의 보드를 만들어서 별(*)과 공백을 구분하여 값을 넣어 준다.

1. 풀이 과정1 과 방식은 동일하지만, 조건문을 만족하지 않는 나머지에 공백으로 채워 준다.

char[][] board = new char[N][N];

for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
        if(j <= i) {
            board[i][j] = '*';
        }
        else {
            board[i][j] = ' ';
        }
    }
}

 

이는 다음과 같은 구조를 따른다.

난이도가 어려운 문제에서는 여러 풀이 방식을 생각하기도 어렵고 틀리는 경우가 많기 때문에
이 처럼 쉬운 문제에서 다양하게 시도해 보는 것이 좋다.

 

전체 코드 1

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));
        StringBuilder str = new StringBuilder();
        int N = Integer.parseInt(br.readLine());

        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= i; j++) {
                str.append("*");
            }
            str.append("\n");
        }

        System.out.println(str);
    }
}

전체 코드 2

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));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());

        char[][] board = new char[N][N];

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if(j <= i ) {
                    board[i][j] = '*';
                }
                else {
                    board[i][j] = ' ';
                }
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                sb.append(board[i][j]);
            }
            sb.append("\n");
        }

        System.out.println(sb);
    }
}

 

반응형