Programming/Algorithm

[백준] 2434번 : 별 찍기 - 1

Supreme_YS 2021. 10. 27. 18:54

 

 

2438번: 별 찍기 - 1

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

www.acmicpc.net

문제 : 입력되는 숫자만큼의 별을 찍어라


자바 코드

package Step3;

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

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

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

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

요즘, BufferedReader로 푸는게 약간 중독성이 있어서 포스팅으로도 한 번 또 남겨본다. Scanner보다 훨씬 속도 측면에서 우수한 성능을 보이기 때문에 애용하게 되는 것 같다..헿...


그렇게 어려운 문제는 아니다. 다만, 입력값이 커짐에 따라서 Scanner, BufferedReader, StringBuilder 등을 잘 활용해야한다는 점이다. 그래서 Scanner는 제외하고, StringBuilder 및 BufferedReader & BufferedWriter를 활용한 방법들을 코드로 작성해보았다.

 

먼저, StringBuilder로 구현한 코드다.

package Step3;

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

public class PrintStars2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        br.close();

        StringBuilder sb = new StringBuilder();

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++){
                sb.append("*");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
}

처음의 코드와는 크게 다른 점이 없지만 모든 문자열을 하나의 객체(StringBuiler)에 연결한 후, 출력은 마지막에 한 번만 해주니 시간을 아낄 수 있는 방법 중 하나다.

 

다음은 BufferedWriter를 활용한 방법이다.

package Step3;

import java.io.*;

public class PrintStars3 {
    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());
        br.close();

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                bw.write('*');
            }
            bw.newLine();
        }
        bw.flush();
        bw.close();
    }
}

 

위에부터 순서대로

BufferedRead & Writer

StringBuilder 

BufferedRead 사용한 방법이다.

확실히, Scanner보단 더 나은 성능을 보여주는 것을 알 수 있다. 앞으로 백준 문제에서 대용량 입출력 문제가 나올시엔.. 필수적으로 BufferedRead & Writer를 적극 사용해보는 것으로...ㅎㅎ

'Programming > Algorithm' 카테고리의 다른 글

[백준] 1110번 : 더하기 사이클  (0) 2021.10.29
[백준] 팩토리얼  (0) 2021.10.28
[백준] 3052번 : 나머지 (Java)  (0) 2021.10.27
[백준] 빠른 A+B (JAVA)  (0) 2021.10.20
선형 리스트 (Linear List)  (0) 2021.09.27