BufferedReader와 EOF와 파일과 IDE

이 글은 읽는데 약 2분이 걸립니다.

백준 등의 알고리즘 문제 풀이 사이트에서 종종 입력에 끝을 명시적으로 주지 않고 단순히 파일의 끝에서 입력을 멈춘다는 식으로 주는 경우가 있다.

백준 기준으로 10951번 문제 “A+B – 4″나 4779번 문제 “칸토어 집합” 등이 있다.

403 Forbidden
403 Forbidden

특히 10951번 문제가 EOF(End Of File) 처리를 연습하기 좋은 문제이다. 어쨌든 EOF 처리 방법의 경우는 검색하면 언어별 사용 입력 방식에 따라 잘 정리되어 있다.

예시로 JAVA에서 BufferedReader를 이용하여 입력을 줄단위로 받을 경우 EOF는 다음과 같이 처리할 수 있다.

String input = "";
while((input = br.readLine()) != null) {
    System.out.println(input);
}

while문을 이용하여서 입력이 null일 때 까지 입력 받는다.

문제는 이 방식은 입력을 파일로 받을 때나 통하고, IntelliJ 같은 IDE에서 입력 받을 경우 값을 입력을 끝내고 입력하지 않고 엔터를 쳐도 빈 문자열이 입력된 것으로 인식하고 계속 입력을 받는다.

이런 경우에는 입력이 비어있는 경우도 조건에 추가해서 입력받아야 한다.

String input = "";
while((input = br.readLine()) != null && !input.isEmpty()) {
    System.out.println(input);
}

이런식으로 조건 뒤에 && !input.isEmpty()와 같이 입력이 빈 문자열인지를 검사하는 부분을 추가하여서 IDE에서 값 입력 후 엔터를 한번 더 쳐도 입력이 끝난것으로 간주하고, 파일로 받아도 EOF가 정상적으로 처리되는 코드를 이용할 수 있다.

댓글