Language/Python

[Python] sys.stdin.readline()과 input()의 차이 | 백준 2751번

이무기뱀술 2022. 1. 26. 10:00
728x90

무수한 수정 요청

# 처음 생각한 코드

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