[Scanner]
- 직관적이고 내장 메소드가 많아서 활용성이 높다.
- 키보드로부터 입력받은 즉시 메모리 전송!
- 띄어쓰기와 개행문자(엔터)를 기준으로 입력 값 인식
사용법
객체생성 - 입력값 받기 - 리소스 닫기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// Scanner 객체 생성
int n = sc.nextInt();
// 정수형 입력값 받을 땐 nextInt()
System.out.println(n);
sc.close();
// 리소스 닫기
}
}
[BufferedReaer]
- 버퍼를 거쳐서 메모리 전송!
- 키보드의 입력을 바구니(버퍼)에 차곡차곡 모아두었다가
- 한번에 쑝 전송하기 때문에 버퍼링이 없음!
- 개행문자로 경계 인식
- 입력 데이터값은 String으로 고정이기 때문에 데이터 가공 필수!
사용법
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N/4; i++)
sb.append("long ");
System.out.println(sb.append("int").toString());
}
}
대부분 학교나 학원에서는 Scanner를 주로 사용한다. (간단하니까)
하지만 백준 문제 상위권 소스코드를 보면 대부분 BufferedReader를 사용하여 성능과 속도를 챙기고 있다.
실제 예시
내가 푼 문제 예시를 보면
위가 BufferedReader 사용
아래가 Scanner 사용
코드의 길이는 414B,415B로 비슷하지만
메모리와 시간의 차이를 보면 확 느껴지는 성능차이!
'Baekjoon' 카테고리의 다른 글
[Java/Algorithm] 백준 10818번: 최소, 최대 구하기 (배열o, 배열x) (0) | 2023.11.12 |
---|---|
[Java/Algorithm] 백준 10871번: X보다 작은 수 (0) | 2023.11.12 |
[Java/Algorithm] 백준-10951 EOF 사용하기 + 성능비교 (1) | 2023.11.11 |
[Java/Algorithm] Java11에 추가된 String 메소드 repeat()로 코드 단축하기 (0) | 2023.11.10 |
[Java/Algorithm] BufferedWriter vs. StringBuilder 속도차이! (0) | 2023.11.10 |