Java/BaekJoon

[Java , BaekJoon] 자바로 백준 입력 받는 법 정리

alska95 2021. 6. 29. 20:08

백준 문제를 자바로 풀다 보면, Scanner 대신 BufferedReader을 사용해야만 하는 문제들이 있다.

필자의 경우에는 10815번 문제를 올바르게 풀었음에도 계속 시간 초과가 나는 상황을 맞닥뜨렸다.

이때 Scanner 보다 성능이 좋은 BufferedReader에 대해 알게 되었고 , 시간 초과를 해결할 수 있었다.

본 포스트는 이에 대한 정리이다.

 

성능 차이에 대한 글 : https://algospot.com/forum/read/2496/


BufferedReader

 

사용하려면 main클래스에 throws IOException을 추가해 주어야 한다.

public static void main(String[] args) throws IOException

readLine을 사용하여 한 줄씩 읽어 들인다.

공백을 기준으로 입력받으려면 후술 할 StringTokenizer을 사용하여야 한다.

 

문자열 입력

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        str = br.readLine();

전체 입력 저장

        String str = "";
        String tmp = "";
        while((tmp = bf.readLine())!= null){
            str += tmp + "\n";
        }

정수 입력

BufferedReader.readLine()은 기본적으로 String으로 읽어오기 때문에 형 변환을 해주어야 한다.

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int a = "";
        a = Integer.parseInt(br.readLine());

 


StringTokenizer

 

공백으로 한 글자씩 구분되는 입력의 경우 StringTokenizer로 공백을 제외(대상을 " " 로)하고 입력받을 수 있다.

        int [] targetArray = new int[100];
        st = new StringTokenizer(sc.readLine()," ");
        for(int i = 0 ; i < M ; i++){
            targetArray[i] = Integer.parseInt(st.nextToken());
        }