[Python] sys.stdin.readline()과 input()의 차이 | 백준 2751번
# 처음 생각한 코드
def P1225():
lines = int(input())
numbers = []
for i in range(lines):
numbers.append(int(input()))
numbers.sort()
print(*numbers, sep='\n')
if __name__ == '__main__':
P1225()
# 갖은 방법을 시도했으나 시간초과로 실패한 코드
lines = int(input())
numbers = sorted((int(input()) for _ in range(lines)))
print(*numbers, sep='\n')
# 성공한 코드
lines = int(input())
numbers = sorted((int(sys.stdin.readline()) for _ in range(lines)))
print(*numbers, sep='\n')
처음 생각한 코드는 매우 단순했다.
lines를 입력받고 lines만큼 for 문을 돌리며 numbers 리스트에 append한다. 그리고 정렬한 리스트를 한 줄씩 출력한다.
그러나 돌아온 것은 시간초과
시간 복잡도 문제인가 싶어서 병합정렬이나 힙정렬같은 것을 직접 구현해볼까 했지만, 파이썬 기본 정렬 메소드가 웬만하면 빠르다는 말에 pass
그 다음은 파이썬 언어 파고들기
for 문 -> 리스트 컴프래핸션
리스트 -> 제너레이터
그 외에 메모리와 속도 면에서 효율적인 방법을 모두 넣었다.
sorted()를 쓴다던가...
그러나 또 실패...
그런데 찾아보니 파이썬 input에 문제가 있다고 한다.
https://www.geeksforgeeks.org/difference-between-input-and-sys-stdin-readline/
Difference between input() and sys.stdin.readline() - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
위 사이트에 따르면 input은 sys.stdin.readline()과 달리
1. 이스케이프 문자 제거
2. 기본값을 프롬프트에 출력
두 가지 기능을하여 속도가 느리다고 한다...!
사용자를 위한 기능이 사용자를 배신하다니
허탈..