본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 15552번 java 빠른 A+B BufferedReader.. InputStreamReader

by 졸린이 2020. 7. 21.
반응형

백준 15552번 java 빠른 A+B BufferedReader.. InputStreamReader

뭐라 뭐라 쏼라쏼라쏼라..  그러니까 자바에서는 System.out.println()이것과 Scanner를 쓰지 말란 소리 코드부터 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
//baekjoon_15552 빠른 A+B
public class Main{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        int t = Integer.parseInt(br.readLine());
        int a, b;
        
        for(int i=0; i<t; i++) {
            st = new StringTokenizer(br.readLine());
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
            
            bw.write(a++ "\n");
        }
        bw.flush();
        br.close();
        bw.close();
    }
}
cs

세상에 Scanner로 입력받으면 세상 편한대 BufferedReader클래스로 입력받으면(클래스 이름도 더럽게 길어서 진짜..)  저렇게 코드가 길어진다.

고작 두 변수를 더하는 코드인데.. 그리고 Scanner와 달리 IOException 예외처리를 해줘야 한다.

try catch문으로 하거나 위에 10행처럼 throws Exception해주면 된다.

11행 12행에서 입력출력 위한 br bw 선언해주고

 

BufferedReader는 아 길어 아무튼 String으로 읽어오기 때문에 int값으로 읽어오고 싶으면 15행처럼 변환해 줘야 한다.

이렇게 testcase를 입력 받고 for문에서 a, b에 또 변수를 각각 입력해야 하는데 버퍼리더는 한 라인을 그대로 읽어오기 때문에 StringTokenizer로 끊어서 입력해줘야 한다.

 

그리고 bw.write로 변수값더해서 flush()로 출력하면 끝

 

아 이렇게 복잡한 걸 왜 쓰지 Scanner 쓰면 그만인걸 

속도 차이 때문이란다. 재귀함수나 그런데서 큰 차이가 난다나? 음 난 아직 체감을 해본적은 없다 ㅎ

아 그리고 맨 위에 Scanner는 import 안해도 상관없다. 두개를 테스트하다 안지워서 그만 ㅎ..

또 BufferedReader InputStreamReader 뭐 막 import 해놨는데 어디서 임포트하는지랑 스펠링 타자 익숙을 위해서 다 써놨는데 그냥 import.java.util.*; 그리고 import.java.io.*;

이렇게 *하나만 해놓으면 util, io 밑에 하위 클래스들 죄다 임포트해오니까 그렇게 하면 된다

반응형

댓글