본문 바로가기
JAVA

[JAVA][백준] 10989_수 정렬하기 3 (BufferedReader)

by saemsaem 2024. 4. 16.

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

public class sorting3_10989 {
    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());
        int[] arr = new int[n];

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
        Arrays.sort(arr);

        for (int i = 0; i < n; i++) {
            sb.append(arr[i]).append('\n');
        }
        System.out.print(sb);
    }
}

이 문제에서 주의해야 할 점은 '시간제한'이 있다는 것이다. 
때문에 Scanner를 사용하면 이 문제를 풀 수 없다. 

시간을 단축시키기 위해서는 BufferedReader를 사용해야 한다. 
그동안 익숙하지 않아서, Scanner가 편해서 BufferedReader 사용을 미뤄왔는데, 이제는 진짜 익숙해질 때다. 


BufferedReader

버퍼를 사용하지 않는 입력 : 키보드 키를 누르는 즉시 바로 프로그램에 전달된다.
버퍼를 사용하는 입력 : 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송한다. 버퍼가 가득차거나 줄바꿈문자가 나타나면 버퍼의 내용을 한 번에 프로그램에 전달한다. 

=> 중간에 버퍼를 두고 한번에 문자를 묶어서 보내면 더 효율적이고 빠르게 전달할 수 있다. 

사용법

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(br.readLine());

string으로 리턴 값이 고정되어 있기 때문에, 다른 타입으로 입력받을 때는 형변환이 필요하다. 

줄바꿈문자 기준이 아닌, 공백 단위로 데이터를 사용하려고 한다면 StringTokenizer / String.split() 을 사용해야 한다.


- StringTokenizer 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());

readLine()으로 입력받은 값을 nextToken() 함수를 통해 공백 단위로 구분할 수 있다.

- String.split()

String arr[] = s.split(" ");

공백단위로 끊어 배열에 저장할 수 있다. 

'JAVA' 카테고리의 다른 글

[JAVA][백준] 2751_수 정렬하기 2  (0) 2024.04.18
[JAVA][백준] 1181_단어정렬 (Comparator)  (1) 2024.04.18
[JAVA][백준] 1978_소수 찾기  (0) 2024.04.15
[JAVA][백준] 10809_알파벳  (0) 2024.04.15
[JAVA][백준] 8958_OX퀴즈  (0) 2024.04.15