#15552 - 빠른 A + B
📌 문제 정보
- 문제 이름 : #15552번 - 빠른 A + B
- 문제 링크 : https://www.acmicpc.net/problem/15552
📌 문제 요약
- 핵심 조건: 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어짐.
- 제한: A와 B는 1 이상, 1,000 이하
📌 최종 정답 및 풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
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 T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String[] input = br.readLine().split(" ");
int A = Integer.parseInt(input[0]);
int B = Integer.parseInt(input[1]);
bw.write((A + B) + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
<-- 풀이 요약 -->
- 이 문법 자체를 몰라서 그냥 GPT 도움을 받음.. 코테에서는 직접 쓸 일이 거의 없다고 함!! 미리 쓰는 연습은 해보기
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** 빠른 입출력에 대한 문법 총정리 **
1. BufferedReader, BufferedWriter 기본 문법
- BufferedReader : 한 번에 한 줄씩 입력 받아서 빠르게 읽음. (내부 버퍼 사용 -> 속도 빠름.)
- BufferedWriter : 출력 결과를 버퍼에 모아두었다가 한 번에 출력 (속도 빠름)
- throws IOException : BufferedReader나 BufferedWriter는 입출력 작업이라 IOException이 발생할 수 있음.
=> 그래서 main() 옆에 throws IOException을 붙여서 예외를 처리해줘야 함.
// 빠른 입력
import java.io.BufferedReader;
import java.io.InputStreamReader;
// System.in(표준 입력)을 InputStreamReader로 감싸고, 그걸 다시 BufferedReader로 감싸서 사용함.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 빠른 출력
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
// System.out을 OutputStreamWriter로 감싸고 그걸 BufferedWriter로 감싸서 사용함.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 예외 처리
public static void main(String[] args) throws IOException
2. 빠른 입출력은 어디에서 써야할까?
- 입출력이 많고 빠른 처리가 필요할 때. (코딩 테스트에서 시간 초과 주의! -> 시간초과 방지를 위해 많이 씀.)
- Scanner보다 BufferReader가 10~50배정도 빠름.
| 목적 | 느린 방식 | 빠른 방식 |
| 입력 | Scanner | BufferedReader + InputStreamReader + readLine() + split() + parseInt() |
| 출력 | System.out.println | BufferedWriter + OutputStreamWriter + write() + flush() |
- BufferedReader, BufferedWriter는 입출력 도구(클래스) / readLine(), write(), flush()는 메서드(함수)
3. 공식처럼 외우면 좋을 빠른 입출력 기본 템플릿 (공식 문법X, 표준 라이브러리 조합 대표 패턴)
// 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine(); // 공백을 포함한 한 줄 읽기 (String)
String[] tokens = line.split(" "); // 여러 값이 있을 때 공백으로 쪼개는 것.
int num = Integer.parseInt(tokens[0]); // readLine()이 무조건 문자열이라 숫자 필요시 변환
// 출력
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("출력할 내용\n"); // 출력할 내용 문자열로 써야함.
bw.flush(); // 버퍼에 남아있는 내용 전부 출력
bw.close(); // 스트림 닫기
- flush()를 안 적으면 출력이 안 나올수도 있으니 꼭 적기.
"Java를 사용 시 Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다."