알고리즘 문제를 풀다보면 입력의 끝을 EOF로 주는 곳이 있음. 본래 끝에 0이든 뭐든 끝나는걸 의미하는 입력으로 마무리하는게 일반적인데 EOF로 끝내면 어떻게 해야할 지 난감함. 특히 파이썬으로 이를 하고 있는데 어떻게 해야 될지 간략하게 언급해봄.
while True:
try:
A = int(input())
print(A)
except EOFError:
break
while True:
try:
A = int(input())
print(A)
#EOFError를 생략해도 except만 있으면 넘어감
except :
break
이와 같이 try, except로 내장함수 input의 eof 처리가 가능함. 윈도우 환경 키보드로 eof를 입력하려면 Ctrl + z를 누르면 됨
파이썬 내장 input함수는 느림. 그래서 입력을 몇십만개 몇백만개 받아야하는 문제에선 input 함수를 사용할 수 없음. 그 때 대체로 sys.stdin.readline 함수를 사용함. 근데 이 함수는 eof를 만났을때 except를 일으키는게 아니라 순수하게 빈 문자열을 반환함.
import sys
while True:
# 보다시피 sys 라이브러리의 함수라서 import sys를 해야함.
temp = sys.stdin.readline()
if temp == "":
break
else:
temp = int(temp)
print(temp)
sys.stdin.readline 라이브러리라서 끝에 무조건 \n이 붙음. 그래서 아무런 문자열을 치지 않더라도 끝에 \n가 붙어서 나옴. 그런데 EOF를 만나면 \n 조차도 없는 빈문자열이라는 뜻.
마지막 ctrl + z를 누르기전 그냥 아무것도 치지 않은채로 엔터 눌렀는데 \n 하나만 있는 문자열이 리스트에 저장되어있음.
input함수 -> try except로 eof 감지하기
sys.stdin.readline -> 입력받는 값이 "" 인지 아닌지 확인후 진행하기.
윈도우 환경에서 eof 키보드 입력은 ctrl + z임.