[Python] EOF

EOF

백준 홈페이지에서 문제를 단계별로 풀다보면 10951번, A+B -4번 문제를 만날 수 있다. 이 문제를 보면 이전의 문제들과는 다른데, 바로 테스트 케이스의 개수가 없다. 즉 언제 끝나야하는가?를 명시하지않았다. 이 때 필요한 개념은 EOF인데, End Of File이라는 뜻으로 파일의 끝이라는 뜻을 가지고 있다. 파일의 끝이라는 말은 쉽게 말해서 프로그램의 끝, 즉 종료를 말한다고 생각하면 된다.

백준 10951번을 예로 들어보자.

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

1
2
3
while 1:
    A, B = map(int, input().split(" "))
    print(A + B)

파이썬을 조금 공부해 본 사람이라면 쉽게 이런 코드를 작성할 수 있다. 하지만 이 문제에는 함정이 있는데, 바로 프로그램의 종료 시점을 정확하게 알려주지않았다. 테스트 케이스의 개수라던가, 반복문의 종료라던가 프로그램이 모든 명령을 처리하면 프로그램은 자동으로 종료되어야하는데, while 1구문덕분에 프로그램은 끝나지않고 무한히 A, B를 입력받고 A + B를 출력하기에 이른다.

이 때 필요한 것이 EOF를 명시해주는것이다. 실제로 백준에 문제를 저대로 제출하면 EOFError라는 런타임 에러를 뱉고 정답풀이에 실패하게된다. try ~ except구문으로 런타임 에러가 발생했을 때 반복문을 탈출하는 식으로 코드를 구성하면 된다.

1
2
3
4
5
6
while 1:
    try:
        A, B = map(int, input().split(" "))
        print(A + B)
    except:
        break

댓글남기기