-
[백준 알고리즘/Java] 15552번 빠른 A+BIT Study/백준 알고리즘 2023. 3. 13. 17:54728x90
사용자에게 입력받는 함수로는 Scanner만 알고 있었기 때문에
처음엔 1000번 'A+B'와 동일하게 작성하게 제출했습니다.
<시간 초과>
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); for(int n = 0; n < t; n++) { int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(a+b); } } }
Scanner와 System.out.println()을 사용하면 시간 초과로 15552번 문제를 넘어갈 수 없습니다.
이를 해결하기 위해서는 BufferedReader와 BufferedWriter의 개념을 이해해야합니다.
1. 최종 결과만 보고싶으시다면 아래의 <최종 제출본>을 봐주세요!
2. BufferedReader와 BufferedWriter의 개념에 대해 이해하고 싶으시다면 아래의 링크를 타고 들어가주세요!
<최종 제출본>
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 { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); StringTokenizer st; for(int i = 0; i<n; i++) { st = new StringTokenizer(br.readLine(), " "); bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n"); } br.close(); bw.flush(); bw.close(); } }
<과정>
① import문 선언 및 예외처리
import문 : 자바 컴파일러에 코드에서 사용할 클래스의 패키지에 대한 정보를 미리 제공하기 위해 선언
import java.io.BufferedReader; // BufferedReader import java.io.BufferedWriter; // BufferedWriter import java.io.IOException; // throws IOException import java.io.InputStreamReader; // InputStreamReader import java.io.OutputStreamWriter; // OutputStreamWriter import java.util.StringTokenizer; // StringTokenizer
public static void main(String[] args) throws IOException { // BufferedReader, BufferedWriter를 위해 예외 처리
② 입력을 위해 BufferedReader, 출력을 위해 BufferedWriter를 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
③ 테스트케이스의 개수를 입력받기 위한 변수 n을 선언
int n = Integer.parseInt(br.readLine()); // br.readLine() : String 타입으로 입력 // Integer.parseInt() : int 타입으로 변경
④ 문자열을 (사용자가 지정한) 구분자로 분리하기 위한 Token을 선언
StringTokenizer st;
⑤ 두 정수 A, B를 n번 입력받기 위해 for문을 사용
for(int i = 0; i<n; i++) { st = new StringTokenizer(br.readLine(), " "); bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n"); }
st = new StringTokenizer(br.readLine(), " "); // StringTokenizer(String str,String delim) // 주어진 문자열 str을 구분자 delim으로 분리한 Token(분리된 문자열)
bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n"); // write() : 출력할 내용 담기 (아직 출력되지 않음) // nextToken() : Token(분리된 문자열) 반환
⑥ 입력 스트림 닫기
br.close();
⑦ 버퍼 비우기와 동시에 출력, 출력 스트림 닫기
bw.flush(); // 버퍼 비우기와 동시에 출력 bw.close(); // 출력 스트림 닫기
'IT Study > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘/Java] 10811번 바구니 뒤집기 (0) 2023.03.14 [백준 알고리즘/Java] 2439번 별 찍기 - 2 (0) 2023.03.14 [백준 알고리즘/Java] 2480번 주사위 세개 (0) 2023.03.13 [백준 알고리즘/Java] 2525번 오븐시계 (0) 2023.03.13 [백준 알고리즘/Java] 2884번 알람시계 (0) 2023.03.10