백준 사이트에 입출력 속도 비교하는 내용이 있는데 유용한 자료같다.
https://www.acmicpc.net/blog/view/56
https://www.acmicpc.net/blog/view/57
이중 Java와 관련된 내용만 뽑아보면 아래와 같다.
입력 측정 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일을 입력받는데 걸리는 시간을 측정. 10번 측정해서 평균값으로 순위를 매김
순위 |
언어 |
입력 방법 |
평균(초) |
6 |
Java |
BufferedReader, Integer.parseInt |
0.6585 |
17 |
Java |
Scanner |
4.8448 |
출력 측정 방법: 총 N개의 줄에 1부터 10,000,000까지의 자연수를 한 줄에 하나씩 출력하는 시간을 측정. 10번 측정해서 평균값으로 순위를 매김
순위 |
언어 |
출력방법 |
평균(초) |
7 |
Java |
BufferedWriter, bf.write(i + "\n"); |
0.9581 |
10 |
Java |
StringBuilder를 이용해 문자열 하나로 만든 다음, System.out.println(sb); |
1.1881 |
11 |
Java |
BufferedWriter, bf.write(Integer.toString(i)); bf.newLine(); |
1.2556 |
18 |
Java |
PrintWriter |
1.954 |
43 |
Java |
System.out.println(i); |
30.013 |
입력은 워낙 차이가 많이 나기 때문에 BufferedReader를 사용하는데 이견이 없다.
출력의 경우 BufferedWriter를 쓰면 단순 출력보다는 조금 빨라지는데 코드가 상대적으로 복잡해지기 때문에 간단히 StringBuilder에 println 조합으로도 충분해보인다.