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를 입력해 프로그램 입력을 끝내야 한다.
'Inactive Board' 카테고리의 다른 글
[DS] 스택, 큐, 덱 (0) | 2024.11.26 |
---|---|
[DS] Stack, Queue, Deque (0) | 2024.11.25 |
[Python] BOJ 11718: No input values, No EOFError? (0) | 2024.11.22 |
[Python] 시간 복잡도: 문자열 결합 연산 쓰지 마! (0) | 2024.11.19 |
[Python] Time Complexity: No String Concatenation! (0) | 2024.11.18 |