본문 바로가기
📚Languages/JAVA 개념·문법·에러

[JAVA 문법] 입력: BufferedReader와 Scanner의 속도 차이😲

by psS2mj 2020. 5. 9.
반응형

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

며칠 전 백준 알고리즘 사이트를 들어갔다가 예전에 틀린 채로 남아있는 브론즈 문제가 있길래 풀었다.

문제는 매우 간단한 최소, 최대 관련 문제였는데 순간 호기심이 생겨서 입력을 한 번은 Scanner로, 또 한 번은 BufferedReader로 받아서 속도 차이를 확인해보았다. (나는 평소에 BufferedReader를 쓰는데, 이게 더 빠르다고는 했지만 얼마나 빠르다는건지 궁금했다^_^)

 

그리고 그 결과.. 엄청난(?) 속도 차이!!

 

아래: Scanner를 사용한 코드

import java.util.Scanner;
public class Main {
	static int N, min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
	static int[] nums;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		nums = new int[N];
		for (int i = 0; i < N; i++) {
			nums[i] = sc.nextInt();
		}
		for (int n : nums) {
			min = (min > n) ? n : min;
			max = (max < n) ? n : max;
		}
		System.out.println(min + " " + max);
	} // main
} // class

실행속도가 1464ms가 나왔다.

 

 

위: BufferedReader를 사용한 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
	static int N, min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
	static int[] nums;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		nums = new int[N];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) {
			nums[i] = Integer.parseInt(st.nextToken());
		}
		for (int n : nums) {
			min = (min > n) ? n : min;
			max = (max < n) ? n : max;
		}
		System.out.println(min + " " + max);
	} // main
} // class

실행속도가 420ms가 나왔다.

 

 

<결론>

1464ms VS 420ms 으로 BufferedReader가 약 3.48배 빠른 속도를 보였다.

코드는 좀 길지만 한 번 익혀두면 훨씬 빠르고 다양한 입력을 받을 때도 편하게 사용할 수 있으니 BufferedReader를 씁시다.

 

 

 

- 호기심 충족했으니 끝😄😆 -

반응형

댓글