-
[Python] sys.stdin.readline()과 input()의 차이 | 백준 2751번Language/Python 2022. 1. 26. 10:00728x90
무수한 수정 요청 # 처음 생각한 코드 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. 기본값을 프롬프트에 출력
두 가지 기능을하여 속도가 느리다고 한다...!
사용자를 위한 기능이 사용자를 배신하다니
허탈..
728x90'Language > Python' 카테고리의 다른 글
[Python] 설치된 패키지 목록 만들기 | requirements.txt (0) 2022.04.25 [백준] 백준에서 NumPy 사용 안되나요? (0) 2022.02.17 [Python] 한 줄로 된 숫자를 리스트로 입력받는 법 (0) 2022.02.04 [Python] 리스트를 요소의 길이 별로 정렬 | 내장 함수 sorted()의 key 매개변수 활용과 딕셔너리 컴프리핸션 | 백준 1181번 해설 (0) 2022.01.28 [Python] 여러 줄 한번에 입력하여 리스트로 만들기 (0) 2022.01.27