반응형
백준 코테를 1단계부터 하고 있다 보니, Scanner는 많은 데이터를 입력받아 처리할 때 Timeout이 뜬다는 사실을 알았다.
해결 방안으로는 Buffer와 StringBuilder가 있어서 자세히 알아보고자 한다.
Scanner vs Buffered 차이
Scanner는 사용자 입력에 따라 하나씩 값을 전달한다.
사용자가 "HELLO"라는 값을 입력 하면 "H", "E", "L", "L", "O" 각각 5번의 전달이 이루어진다.
하나씩 전달하는 과정에서 시간이 소요되므로 많은 데이터를 처리할 때 Timeout이 발생 한다.
Buffer는 사용자가 입력하면 Buffer라는 공간에 저장해놨다가 입력이 완료 되는 시점/버퍼가 가득찬 시점에 전달된다.
숫자 5개를 입력 받아 합을 구하는 함수로 테스트 해보자.
1. Scanner
Scanner sc = new Scanner(System.in);
System.out.println("숫자 5개를 입력해 주세요");
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += sc.nextInt();
}
System.out.println("입력 한 숫자의 총합은 " + sum + " 입니다");
2. BufferedReader / Writer
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
System.out.println("숫자 5개를 입력해 주세요");
StringTokenizer st = new StringTokenizer(br.readLine());
int sum = 0;
for(int i = 0 ; i < 5 ; i ++) {
sum += Integer.parseInt(st.nextToken());
}
System.out.println("입력 한 숫자의 총합은 " + sum + " 입니다");
bw.write("입력 한 숫자의 총합은 " + sum + " 입니다");
bw.flush();
bw.close();
br.close();
write() : 버퍼에 내용 입력
flush() : 버퍼에 입력 된 내용 출력
close() : 버퍼 메모리 해제
반응형
'개발 > Java' 카테고리의 다른 글
자바 미니 솔루션 (1) - 학생 관리 시스템 (0) | 2023.02.21 |
---|---|
Collection - List, Map, Set (0) | 2023.02.21 |
Thread sleep(), join() (0) | 2023.02.20 |
사용자 정의 Exception (0) | 2023.02.20 |
Thread와 Runnable차이 (0) | 2023.02.20 |