on
[JAVA] baekjoon 15552
[JAVA] baekjoon 15552
브론즈 2 문제. 빠른 A+B 15552번: 빠른 A+B (acmicpc.net)
문제를 풀기 전, 필요한 개념을 공부해야한다.
[Java 자바 입출력] BufferedReader/BufferedWriter (tistory.com)
Buffer
데이터를 한곳에서 다른 곳으로 전송하는 동안 일시적으로 데이터를 보관하는 임시 메모리 영역
버퍼를 이용해서 읽고 쓰면 속도 향상에 효율적
메모리 버퍼에 데이터를 한데 묶어서 이동시키는 것!
Buffer Flush (버퍼 플러시)
버퍼에 남아있는 데이터를 출력 (버퍼를 비우는 동작)
BufferedReader : 버퍼를 이용한 입력
엔터만 경계로 인식하고 데이터를 String으로만 인식하기 때문에 따로 가공 필요
많은 데이터를 입력받아야 할 상황에서 이용하면 좋음
BufferedReader는 IOException처리가 무조건 필요!
사용방법 readLine() 을 사용하면 데이터를 라인 단위로 읽음 리턴값이 String으로 고정되므로 다른 타입일 시, 형변환을 해줘야 함 공백 단위로 데이터를 구분하려면?
StringTokenizer의 nextToken 함수 OR String 클래스의 split 함수 이용!
더보기 StringTokenizer - 사용자가 지정하는 구분자를 경계로 하여 문자열을 나눠주는 Class - 생략 시, default는 공백 이나 탭 - 3번째 인수로 구분자를 토큰에 포함할지의 여부 지정 가능 import java.io.*; //import java.io.BufferedReader; //import java.io.IOException; //import java.io.InputStreamReader; import java.util.*; //import java.util.StringTokenizer; class test{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // readLine()을 이용해 한 줄을 한번에 입력받음 //스트링 토크나이저를 이용해 한 줄을 한번에 입력받은것을 띄어쓰기(" ")를 기준으로 쪼갬 StringTokenizer st = new StringTokenizer(br.readLine(), " "); System.out.println(st); //java.util.StringTokenizer@70a9f84e //쪼갠 값이 존재할때까지 반복 while(st.hasMoreTokens()){ //nextToken()을 통해 띄어쓰기(" ")를 제거하고 남은 숫자를 String에서 int로 형변환하여 출력 System.out.println(Integer.parseInt(st.nextToken())); } } }
BufferedWriter : 버퍼를 이용한 출력
System.out.println(""); 과 동일한 함수
많은 양의 출력이 필요할 때 이용하면 좋음
But, 자동 개행이 되지 않기 때문에 "
" OR newLine() 이용!
문제
전체 코드
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; import java.util.StringTokenizer; class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int T = Integer.parseInt(br.readLine()); StringTokenizer st; for (int i=0; i
"); } br.close(); //입력이 끝났으니 닫기 bw.flush(); //버퍼에 남아있는 데이터를 출력 (버퍼를 비우는 동작) bw.close(); } }
BufferedWriter 대신 StringBuilder 를 이용해서 코드를 작성해보겠다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; import java.util.StringTokenizer; class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int T = Integer.parseInt(br.readLine()); StringTokenizer st; for (int i=0; i
"); } br.close(); //입력이 끝났으니 닫기 System.out.println(sb); } }
StringBuilder가 조금 더 빠른 속도를 보이는 것을 알 수 있다.
But, 데이터 수가 매우 많을 경우, BufferedWriter가 더 빠르다고 한다.
from http://thisisprogrammingworld.tistory.com/126 by ccl(A) rewrite - 2021-09-11 18:27:10