개발스토리지😃

[알고리즘] 자바풀이 백준 10871번 X보다 작은 수 Scanner, StringBuilder, BufferedReader 풀이 본문

알고리즘/자바

[알고리즘] 자바풀이 백준 10871번 X보다 작은 수 Scanner, StringBuilder, BufferedReader 풀이

believekim 2024. 11. 28. 20:27

 

https://www.acmicpc.net/problem/10871

 

 

 

Scanner, StringBuilder, BufferedReader를 사용한 풀이를 공유해보고자 한다.

Scanner

작은 규모의 입력에서 사용되고 코드가 직관적이고 간단합니다. 자동으로 공백, 줄바꿈 등을 처리해줍니다.

 

StringBuilder

문자열을 효율적으로 다루기 위해 사용됩니다.

문자열이 반복될 때, StringBuilder는 내부 버퍼를 이용하여 문자열을 수정하고 추가할 수 있어서 성능상 이점이 있습니다.

 

 

BufferedReader

readLine() 메서드를 사용하여 한 줄씩 입력을 받고 StringBuilder와 같이 내부 버퍼를 사용해 입력을 처리합니다.

이와 더불어 문자열을 구분자를 기준으로 분리하는 데 사용되는 StringTokenizer를 사용하였습니다.

StringTokenizer는 split()과 유사한 기능을 제공하지만 성능상 더 유리할 수 있습니다.

 

 

 

공통부분

public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();  // 배열의 크기
        int X = sc.nextInt();  // 비교할 값

        int[] arr = new int[N];

        // 배열에 N개의 값 입력 받기
        for (int i = 0; i < N; i++) {
            arr[i] = sc.nextInt();
        }

        // Scanner를 사용하여 출력
        scanner(N, X, arr);

        // StringBuilder를 사용하여 출력
        stringBuilder(N, X, arr);

        // BufferedReader와 StringTokenizer를 사용하여 출력
        stringTokenizerWithBufferedReader(N, X, arr);

        // Scanner 닫기
        sc.close();
    }

 

 

 

Scanner

// Scanner를 사용하여 X보다 작은 값들만 출력하는 함수
    public static void scanner(int N, int X, int[] arr) {
        for (int i = 0; i < N; i++) {
            if (arr[i] < X) {
                System.out.print(arr[i] + " ");
            }
        }
    }

 

 

 

StringBuilder

    // StringBuilder를 사용하여 X보다 작은 값들만 출력하는 함수
    public static void stringBuilder(int N, int X, int[] arr) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < N; i++) {
            if (arr[i] < X) {
                sb.append(arr[i]).append(" ");
            }
        }
        System.out.println(sb.toString());
    }

 

 

 

BufferedReader

// BufferedReader와 StringTokenizer를 사용하여 X보다 작은 값들만 출력하는 함수
    public static void stringTokenizerWithBufferedReader(int N, int X, int[] arr) throws IOException {
        // BufferedReader로 입력 받기
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 첫 번째 줄은 이미 입력 받았기 때문에 두 번째 줄의 값들을 받아옵니다.
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        StringBuilder sb = new StringBuilder();

        // X보다 작은 값들만 StringBuilder에 추가
        for (int i = 0; i < N; i++) {
            int value = Integer.parseInt(st.nextToken());
            if (value < X) {
                sb.append(value).append(' ');
            }
        }

        // 결과 출력
        System.out.println(sb.toString());
    }

 

 

 

마지막 공백 제거

 

Scanner => if문 사용

// 마지막 값이면 공백을 붙이지 않음
if (i == N - 1) {
    System.out.print(arr[i]);
} else {
    System.out.print(arr[i] + " ");
}

 

StringBuilder, BufferedReader => trim() 사용

// 양쪽 공백을 제거하는 trim()사용
System.out.println(sb.toString().trim());