Scanner는 간단하고 직관적인 입력 처리 방식
버퍼를 사용하지 않는 입력, 키를 누르는 즉시 프로그램에 전달됨
데이터를 읽고 형 변환(파싱)까지 한 번에 수행
예를 들어, 정수나 문자열 입력을 받을 때 편리함
BufferedReader는 데이터를 라인 단위로 읽어 메모리에 저장
버퍼를 사용하는 입력, 입력이 있을 때마다 한 문자씩 버퍼로 전송됨
파싱이나 형 변환은 직접 수행해야 함
데이터가 크거나 I/O 성능이 중요한 경우 적합함
BufferedReader, BufferedWriter은 버퍼를 사용하여 일기, 쓰기를 하는 함수이다.
즉, BufferedReader는 버퍼를 사용해서 읽고 Scanner는 버퍼를 사용하지 않고 바로 읽는다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int num = sc.nextInt();
System.out.println(num);
}
}
}
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
while (st.hasMoreTokens()) {
int num = Integer.parseInt(st.nextToken());
System.out.println(num);
}
}
}
https://www.acmicpc.net/problem/10158
해당 문제에서 입력값에 대한 제한이 다음과 같다.
문제에서 w와 h는 자연수이며 범위는 2 ≤ w,h ≤ 40,000이다. 그리고 개미의 초기 위치 p와 q도 자연수이며 범위는 각각 0 < p < w과 0 < q < h이다. 그리고 계산할 시간 t의 범위는 1 ≤ t ≤ 200,000,000이다.
이때 Scanner를 쓰면 시간초과가 나고 BufferedReader를 쓰면 같은 로직을 쓸 때 통과가 된다.