-
백준 15552 문제 (BufferedReader , 문자열분리, int-String 형변환)알고리즘/백준 문제 2019. 8. 15. 23:04
데이터를 불러올때 하드디스크등 물리적인 접촉이 많을수록 성능이 저하된다. 하지만 메모리에 생성되는 Buffer라는 임시기억장소를 이용하면 데이터를 불러올때마다 물리적인 접촉을 하지 않아도 된다.
하드디스크에 최초로 들렀을때 어느정도 크기의 데이터를 한번에 불러와서 이후에는 메모리에만 접속하면 되어 처리속도가 빨라진다고 한다.
Scanner의 경우 버퍼의 크기가 1024 chars, BufferedReader는 8192 chars 이기때문에 많은 입력이 있을 경우 BufferedReader를 사용하는 것이 좋다고 한다. 그리고 속도에서도 차이가 많이 난다. 이유는 잘 모르지만 Scanner함수가 내부적인 문제라고 하는거같다.
(속도차이 참고 http://blog.naver.com/PostView.nhn?blogId=occidere&logNo=220811824303)
그리고 Scanner는 알아서 parsing을 해주지만 BufferedReader는 그렇지 않다. 그래서 split이나 StringTokenizer 클래스등을 이용하여 직접 해줘야 하므로 조금 더 번거롭다.
/ Int - String 사이 형변환 : https://blog.naver.com/seonju0147/221598387897 /
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int t = Integer.parseInt(br.readLine()); String[][] arr = new String[2][t]; for(int i=0; i<t; i++) { StringTokenizer st = new StringTokenizer(br.readLine()," "); arr[0][i]=st.nextToken(); arr[1][i]=st.nextToken(); } for(int i=0; i<t; i++) { int total = Integer.parseInt(arr[0][i]) + Integer.parseInt(arr[1][i]); bw.write(Integer.toString(total)+"\n"); } bw.flush(); bw.close(); br.close(); }catch (Exception e) { e.getMessage(); } } }