본문 바로가기
Coding Test/백준

[★1][백준2439번 for JAVA]별 찍기 - 2

by B_E_D 2023. 3. 20.

[★1][백준2439번]별 찍기 - 2 (JAVA)

2439번 문제 ☞ https://www.acmicpc.net/problem/2439

난이도 ☞ [★1]

별 찍기 - 2

  • 문제

    • 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
      하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

    • 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

    • 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

      예제입력 예제출력
      5     *
         **
        ***
       ****
      *****

내가 푼 풀이

이번 문제는 공백(" ")과 별()의 갯수를 잘 생각해서 작성을 해야되는 부분입니다. 예제를 예로 들었을 때, 공백(" ")은 4개로 시작해서 점차 하나씩 줄어들고 0에 도달하고 있고, 별()은 하나씩 증가함을 보이고 있습니다. 순서를 따져보자면 공백(" ") -> 별(*)의 순서로 출력을 하고 있어 반복문을 정리를 해보자면 아래와 같습니다.

for (int i = 1; i <= a; i++) {
    for (int j = 1; j <= a - i; j++) {
        System.out.print(" ");
    }
    for (int k = 0; k < i; k++) {
        System.out.print("*");
    }
    System.out.println();
}

값을 받은 a - 반복횟수 i를 해주면 자연스럽게 4, 3, 2, 1, 0으로 줄어 들게 되면서 공백(" ")의 갯수는 줄어들어 입력되게 됩니다. 그리고 별()은 i번 반복될 때 `의 갯수는i`와 같이 증가하니 위와 같이 정의를 해준다면 될 것입니다.

[ 풀이 1 ]

메모리 : 22284KB
시간 : 376ms

Scanner

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        int a = s.nextInt();

        s.close();

        for (int i = 1; i <= a; i++) {
            for (int j = 1; j <= a - i; j++) {
                System.out.print(" ");
            }
            for (int k = 0; k < i; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

위의 방식은 제일 기본적인 Scanner방식이고, BufferedReader로도 출력이 가능하지만, BufferedReader를 약간 더 응용해서 StringBuilder와 함께 작성해보도록 하겠다. BufferedReader로만 구성하는 방법이 궁금하다면 이전 게시물들을 참고하길 바란다. BufferedReaderStringBuilder로 구성한 코드는 아래와 같다.

[ 풀이 2 ]

메모리 : 14288KB
시간 : 144ms

BufferedReader, StringBuilder

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NO2439BOJ2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

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

        br.close();

        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= a; i++) {
            for (int j = 1; j <= a - i; j++) {
                sb.append(" ");
            }
            for (int k = 0; k < i; k++) {
                sb.append("*");
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }
}

Scanner보다 BufferedReader가 확실하게 성능면에서 우수한 것을 알 수있다.

댓글