[JAVA] 열받는 자바문법 : Scanner, BufferedReader
일단, 알고리즘 문제를 풀 때, 초기에 입력해야하는 값이 있다.
입력을 받을 때 나는 주로 Scanner를 이용했다.
참고로 import java.util.*; 혹은 import java.util.Scanner;를 꼭 써주자
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int[] arr = new int[A];
for (int i = 0; i < A; i++) {
arr[i] = sc.nextInt();
}
}
}
위의 코드는 정수인 A를 하나 입력받고, 크기가 A인 int형 배열을 만들어 각 인덱스에 빈칸을 기준으로 값을 입력받는 것이다.
5
4 1 6 4 0
대충 이 위에 있는 놈을 console창에 쓰면 알아서 원하는 자리에 들어가게된다.
이 방법이 편해서 그냥 이렇게 쓰고 있었는데, java로 문제푸는 사람들을 보면 저 BufferedReader를 엄청 많이 쓰더라.
그냥 무시하고 있었는데
백준문제를 풀때 계속 시간초과가 났다.
알고보니 이 Scanner을 사용하면, 시간을 많이 잡아먹는 것이었닥..ㅋㅋ...
(대략 속도가 5배 차이난다.)
밑에 관련 글을 넣겠다.
https://www.acmicpc.net/board/view/36932
글 읽기 - 자바에서 왜 BufferedReader가 Scanner보다 빠를까요?
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
여튼 BufferedReader가 시간적인 면에서 더 유리하다.
데이터를 파싱어쩌구 뭔 복잡스러운 내용이 많던데, 안궁금하지만.. 그래도 대충이라도 알아보자.
우선 이놈을 어떻게 사용하는 지 보도록하자
import java.io.*;
import java.util.*;
import java.util.stream.*;
public class Main {
public static int N;
public static int K;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int[] arr = new int[N];
for(int i = 0; i<N; i++) {
//새로운 줄을 읽기위함
st = new StringTockenizer(br.readLine());
arr[i] = Integer.parseInt(st1.nextToken());
}
intp[][] map = new int[n][m];
for(int i=0; i<n; i++) {
String s = br.readLine();
for(int j=0; j<m; j++) {
map[i][j] = s.charAt(j) - '0';
}
}
}
}
일단 정리를 해보자..
Scanner란?
Scanner 클래스는 입력받은 데이터(바이트)를 다양한 타입으로 변환하여 반환하는 클래스
System.in이란?
사용자로부터 입력을 받기 위한 입력 스트림
BufferedReader란?
데이터를 한번에 읽어와 버퍼에 보관한 후 버퍼에서 데이터를 읽어오는 방식으로 동작하는 클래스
readLine() 메서드는 한 줄을 다 가져오는 기능을 한다.
StringTokenizer?
문자열을 지정한 구분자로 문자열을 쪼개주는 클래스
다시 돌아와서 위의 코드는
3
1 4 6
특징을 간단히 말하면,
Scanner은 쓰기에는 간편한 대신 시간을 많이 잡아먹고,
BufferedReader은 시간은 적게 걸리는 대신, 형 변환에 신경을 써주어야 하고, 예외처리또한 해주어야 한다.
그러니까,
문제봐가면서 어떤 놈을 쓰는 게 더 유리할 지 적절히 판단해서,, 융통성 있게 사용하도록 하자..
애증의 java.
자바를 자바보자..아자아자..파이팅..
관련글
https://rlakuku-program.tistory.com/33
[Java] 빠른 입출력을 위한 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder
BufferedReader / BufferedWriter BufferedReader와 BufferdWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은, 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달된다.
rlakuku-program.tistory.com