sys.stdin.readline()은 빈 문자열을 반환한다!
import sys
while True:
try:
userInput = sys.stdin.readline().strip()
print(userInput)
except:
break
EOFError(End of File)는 파일의 끝, 즉 입력의 끝을 의미한다. input()은 파일의 끝에서 EOFError를 발생시키지만, sys.stdin.readline()은 빈 문자열을 반환하므로 EOFError를 발생시키지 않는다. 따라서 출력 초과로 인한 오답 처리가 되는 것이다.
while True:
try:
print(input())
except:
break
물론 이렇게 간단히 수정해도 좋지만, input() 대신 sys.stdin.readlines()를 사용할 수도 있다.
sys.stdin.readlines()를 사용하자!
import sys
userInput = sys.stdin.readlines()
for i in userInput:
print(i.strip())
input() 대신 sys.stdin.readlines()를 사용하면 시간을 더 단축시킬 수 있다. 단, sys.stdin.readline()과 sys.stdin.readlines() 모두 끝에 개행 문자(\n)를 포함하므로 꼭 strip()을 통해 개행 문자를 제거해 주어야 한다.
sys.stdin.readline()과 sys.stdin.readlines()의 차이는 한 줄의 입력을 읽어오느냐, 모든 입력을 한번에 읽어와서 각 줄을 리스트의 원소로 저장하느냐의 차이다. sys.stdin.readlines()의 경우 사용자가 Enter를 입력하면 그 줄을 읽어 리스트에 추가할 뿐, 입력이 끝났다는 신호가 올 때까지 대기하므로 Ctrl + Z를 입력해 프로그램 입력을 끝내야 한다.
'Insights > For KR' 카테고리의 다른 글
백준 2675번: 디버거로 분석하는 이스케이프 문자 처리 (0) | 2024.11.16 |
---|---|
백준 10809번: find 메서드는 인덱스만 반환하는가? (0) | 2024.11.09 |
백준 3052번: "{}"은 집합? 딕셔너리? (0) | 2024.11.02 |
VS Code로 GitHub에 커밋하기: user.name, user.email (0) | 2024.10.26 |