[파이썬] input() vs sys.stdin.readline()

김학재·2020년 8월 28일
7

파이썬

목록 보기
1/3
post-thumbnail

코딩 테스트를 연습하는 분들이라면 문제는 맞았음에도 효율성 때문에 골머리 앓은 경험이 있을 것이다.
(올 여름 카카오 인턴 코딩 테스트에서도 효율성을 통과하지 못함ㅠ)

평소에는 무분별한 반복문, element에 대한 연산 시간의 초과 등이 주된 원인이었는데 이번에는 아무 생각 없이 사용하던 input() 에서 시간 초과가 발생한 줄 모르고 몇 시간을 골머리를 앓았다.

도저히 해결책을 알 수가 없어서 구글링한 결과 입력을 받는 또다른 sys.stdin~ 에 대해 알게 되어 두 놈이 어떻게 같고 다른지 알아보기로 했다.


input()

python documentation - input()
공식 문서의 정의에 따르면(직역 주의)

If the prompt argument is present, it is written to standard output without a trailing newline.
=> 인자가 존재한다면, 추가 개행 없이 표준 출력에 기록된다


The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that.
=> 입력으로부터 한 줄을 읽어들인 뒤, 문자열로 변환 후(개행은 벗겨내고) 반환한다.

즉, input()사용자의 입력을 받고문자열로 변환추가 strip 진행 의 과정을 거치는 것이다.

또한 input()은 사용자로부터 입력을 받기 전 이를 기다리기 위해 prompt를 가지고 있다. 때문에 대량의 입력을 받는 경우라면 입력을 받고 prompt를 띄우고 의 과정을 반복하므로 오류가 발생할 가능성이 존재한다. (여러 자료를 참고해 제 방식대로 설명한 내용이라 정확하지 않을 수 있습니다.)

sys.stdin.readline()

stdinstandard input을 뜻하며 얼핏 보면 input() 과 같은 동작을 수행한다고 생각할 수 있다.

sys.stdin.readline()은 사용자의 입력을 받지만 개행 문자도 입력을 받을 수 있다. 또한 입력 크기에 제한을 줌으로써 한번에 읽어들일 문자의 수를 정할 수 있다.

num = sys.stdin.readline(2) # 입력 : 1234
print(num) # 결과 : 12

python documentation - sys
input()과 가장 큰 차이점은 input()내장 함수로 취급되는 반면 sys 에 속하는 메소드들은 file object로 취급된다. 즉, 사용자의 입력만을 받는 buffer를 하나 만들어 그 buffer에서 읽어들이는 것이다.

input()은 더 이상 입력이 없는데도 수행될 경우 EOFerror를 뱉어내는 반면 sys.stdin.readline()은 빈 문자열을 반환한다. 어떻게 보면 에러에서도 안전할 듯?


참고 자료
stackoverflow : sys.stdin.readline() and input(): which one is faster when reading lines of input, and why?

GeeksforGeeks : Difference between input() and sys.stdin.readline()

Quora : What is the difference between input() and sys.stdin in Python?

profile
YOU ARE BREATHTAKING

2개의 댓글

comment-user-thumbnail
2020년 12월 7일

좋은 내용이네요

답글 달기
comment-user-thumbnail
2021년 1월 24일

잘 읽었습니다 정리 감사합니다!!

답글 달기