백준 문제를 풀다보면 가끔 입력으로 주어지는 테스트 케이스 개수를 명시하지 않는 경우가 있다. 위의 문제가 바로 그런 경우인데, 이 경우 EOF를 사용할 수 있다.
EOF
End Of File의 약자로, 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없다는 것을 의미한다.
위의 경우 테스트 케이스가 한 줄로 이루어져 있을 뿐, 몇 개의 테스트 케이스가 주어질 것인지 명시되어 있지 않다. 이럴 때에는 입력을 받을 때 사용하는 클래스의 메소드 및 특성을 이용한다. 자바에서 입력을 받을 때 사용하는 Scanner와 BufferedReader 두 가지 클래스의 경우로 나누어 설명하겠다.
Scanner의 경우 해당 클래스가 내장하고 있는 hasNext() 메소드를 사용한다.
형광색으로 표시된 hasNext() 메소드의 설명을 보면 해당 Scanner 객체가 입력에 대한 토큰이 있는 경우 true를 반환한다고 되어 있다. 따라서 다음과 같이 구현하면 EOF를 판단할 수 있다.
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) { // EOF인 경우 false를 반환하여 반복문이 종료된다.
int A = sc.nextInt();
int B = sc.nextInt();
System.out.println(A+B);
}
BufferedReader는 Scanner와 달리 EOF를 처리하는 자체 내장 함수가 존재하지 않는다. 다만, BufferedReader의 readLine() 메소드의 경우 입력 값이 없을 경우(EOF) null을 반환한다는 특성을 이용한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
while ((input = br.readLine()) != null) {
String[] arr = input.split(" ");
int A = Integer.parseInt(arr[0]);
int B = Integer.parseInt(arr[1]);
System.out.println(A+B);
}
'JAVA' 카테고리의 다른 글
[JAVA] Collections.sort vs Arrays.sort 차이 (0) | 2023.06.05 |
---|---|
[JAVA] Array vs ArrayList vs LinkedList (0) | 2023.06.05 |
[JAVA] 변수의 기본형 타입(Primitive type)과 참조형 타입(Reference type) (0) | 2023.05.28 |