백준 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+b + "\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 밑에 하위 클래스들 죄다 임포트해오니까 그렇게 하면 된다
'프로그래밍 > 백준 알고리즘 코드' 카테고리의 다른 글
백준 2742번 java 기찍 N (N부터 1까지 한 줄에 하나씩 출력) (0) | 2020.07.28 |
---|---|
백준 2741번 java N 찍기 (1부터 입력값 N줄 까지 n번째줄 숫자 출력) (0) | 2020.07.28 |
백준 8393번 java 합 (입력값 n까지의 합 출력) (0) | 2020.07.21 |
백준 10950 java A+B - 3 (a+b를 입력하고 값을 출력) (0) | 2020.07.21 |
백준 java 2739번 구구단을 외자! (0) | 2020.05.15 |
댓글