15552 빠른 A+B

15552 빠른 A+B

문제

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.

C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(

)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.

Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.

자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.

이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.

입력

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

출력

각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

정답

import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int num=Integer.parseInt(bf.readLine()); for(int i=0; i

"); } bw.flush(); } }

BufferReader하고 BufferWriter을 안써보고 scanner 클래스, System.out.println만 사용하여 입출력을 해왔는데

시간이 많이 걸린다는 것을 처음 알았다.

코드로만 보면 더 길어져서 복잡해보이지만 오히려 컴퓨터는 더 빨리 걸린다는게 신기할 따름이다.

구글링해서 BufferReader과 BufferWriter의 쓰임새는 알았는데 계속 시간초과가 걸려서 뭔가 했더니..

flush를 내가 for문 안에 넣어서 반복할때마다 계속 버퍼에서 내보내서 시간초과가 걸렸던 것이었다.

flush는 반복문이 끝난이후 한번만 해줘도 된다!

이렇게 했더니 정답이었다.

from http://min-barley.tistory.com/8 by ccl(A) rewrite - 2021-11-02 00:01:17