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

Date:     Updated:

카테고리:

태그:

[★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가 확실하게 성능면에서 우수한 것을 알 수있다.

BKJN 카테고리 내 다른 글 보러가기

댓글 남기기