EOF(End of File)는 파일이나 입력 스트림의 끝을 의미한다.
파일을 끝까지 읽었거나, 입력 스트림에 직접 EOF를 입력하면 프로그램은 EOF가 발생한 걸 인식할 수 있다.
대표적인 예시는 백준 10951번 문제를 보면 된다.
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
처음 접근한 방법
package baekjoon;
import java.io.*;
public class B10952 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String inputString;
int sum;
while ((inputString = br.readLine()) != null) {
String[] inputStringArray = inputString.split(" ");
sum = 0;
for (int i = 0; i < inputStringArray.length; i++) {
sum += Integer.parseInt(inputStringArray[i]);
}
bw.write(sum + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
EOF에 대해 알아보는 과정에서, while문의 조건식에서 바로 입력을 받을 수 있다는 것을 배웠다!

인텔리제이에서는 이미지처럼 공백을 입력해서 NumberFormatException이 발생한다.
하지만 이 코드를 백준에 제출하면 문제없이 해결된다.
구글링해보니 백준은 입력값 자체를 파일로 넘겨주기 때문에 프로그램에서 EOF를 인식하고 null로 반환하여 제대로 실행되는데,
인텔리제이에서 엔터를 입력해서 EOF를 발생시켰을 때는 EOF가 아닌 잘못된 형식의 입력으로 받아들이는 것 같다.
개선된 코드
while ((inputString = br.readLine()) != null && !inputString.isEmpty())
파일 입력 뿐만 아니라 입력 스트림의 끝도 처리할 수 있도록 코드를 수정했다.
isEmpty()는 컬렉션, 문자열 등이 비어있는지 확인하는 메서드로, 비어있다면 true를 반환한다.
즉, 위의 코드는 EOF가 발생하거나, inputString이 비어있는 경우는 반복문을 실행하지 않고 종료하는 코드이다.
결과

이렇게 해서 공백을 입력하면 반복이 종료되면서 공백 입력 전까지의 연산 결과가 출력되는 것을 볼 수 있다.
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[백준][Java] 주어진 단어에서 가장 많이 사용된 알파벳 출력 (0) | 2025.03.27 |
---|---|
[프로그래머스][Java] 자연수 뒤집어 배열 만들기 (0) | 2025.03.17 |
[백준][Java] 0 0이 입력될 때까지 연산 (0) | 2025.03.14 |
[Java, Python] 배열의 평균값 (0) | 2025.03.06 |
[부트캠프][Java] 단어 맞히기 게임 (1) | 2025.02.28 |