

예.
백준 10951번입니다. 참으로 간단해보이죠?
근데 함정이 있음.
🤔 🤔 ...
1️⃣ 입력값의 개수가 지정되지 않음
2️⃣ 입력을 종료키가 지정되지 않음 ( ex. "@"가 입력되면 입력을 멈춘다
한 마디로 입력이 더 들어오지 않으면 알아서 종료시켜야 채점이 된다는 거다
위 문제는 EOF 개념 을 알아야 풀 수 있다
EOF(End of File)는 파일이나 입력 스트림에서 더 이상 읽을 데이터가 없음을 나타내는 신호야.
즉, 입력이 끝났음을 의미하는 특별한 상태야.
파일을 읽을 때
→ 파일의 끝까지 읽고 나면 EOF 발생.
키보드 입력을 받을 때
→ 사용자가 입력 종료 키를 누르면 EOF 발생.
스트림 데이터를 읽을 때
→ 네트워크 소켓, 표준 입력(System.in) 같은 입력 스트림이 더 이상 데이터를 제공하지 않을 때 EOF가 발생.
자바에서는 EOF를 직접 감지하는 기능이 없고, 보통 readLine()이 null을 반환하면 EOF로 간주해.
BufferedReader로 EOF 처리하기while문을 사용한 EOF 처리import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = br.readLine()) != null) { // EOF가 발생하면 null 반환
System.out.println("입력된 값: " + line);
}
}
}
java Main
EOF를 입력하는 방법:
Ctrl + Z 누르고 EnterCtrl + DScanner의 hasNext()를 사용한 EOF 처리Scanner를 사용하면 hasNext()를 이용해 EOF를 감지할 수 있어.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) { // EOF가 발생하면 false 반환
String input = sc.nextLine();
System.out.println("입력된 값: " + input);
}
sc.close();
}
}
Scanner.hasNext()를 사용할 때의 장점hasNext()는 파일 입력, 키보드 입력 모두에서 사용할 수 있어.Scanner를 이용하면 공백 단위 입력도 쉽게 처리 가능.입력 개수가 정해지지 않은 문제를 해결할 때
파일을 다 읽었는지 확인할 때
네트워크 소켓에서 데이터 스트림이 종료되었는지 확인할 때
| 입력 방식 | EOF 감지 방법 |
|---|---|
BufferedReader | readLine() == null |
Scanner | hasNext() == false |
💡 결론:
자바에서는 EOF를 직접 감지하는 방법이 없지만,
BufferedReader.readLine() == null 또는 Scanner.hasNext() == false 를 사용해서 EOF를 확인할 수 있어! 🚀
그렇다고 함.
다음은 활용해서 쓴 나의 코드다.
속도가 느린 느린 scanner()를 쓰고싶지 않아서...
while ((line = br.readLine()) != null) { // EOF를 감지하여 종료
BufferedReader를 활용해서 이렇게 EOF 감지 처리 를 해줌
⬇️ 완성된 나의 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = br.readLine()) != null) { // EOF를 감지하여 종료
StringTokenizer st = new StringTokenizer(line);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a + b);
}
}
}