[Python 3] Input()과 sys.stdin.readline()의 차이점

728x90
반응형

1. 서론

필자가 백준 문제를 풀던 도중 귀찮아서 sys.stdin.readline()을 안쓰고 input()을 썼다가 계속 "시간초과"형을 처분받아서 어쩔 수 없이 input()으로 바꾸고 나니 바로 "성공"을 받아버려서, 이참에 input()과 sys.stdin.readline()의 차이점을 정리해보면 괜찮겠다 싶어서 이 포스트를 쓰게 됐다.

윗쪽 제출이 sys.stdin.readline()을 사용한 제출, 아랫쪽 제출이 input()을 사용한 제출
sys.stdin.readline() 버전
input() 버전

귀찮아도 항상 정석을 고수하도록 하자.

2. 본론

원래 Python 3의 input()은 Python 2에서 raw_input()이라고 사용되던 것이 넘어온거다.

  Python 2에는 input()과 raw_input()이 있었다. Python 2의 input()은 입력된 값의 형태에 따라 알맞은 자료형으로 값을 리턴했는데, raw_input()은 무조건 String 타입으로 받아오는 특징이 있었다.
  Python 2의 input()은 자료형을 맞춰주는 과정이 있기 때문에 raw_input()보다 상대적으로 느렸지만, Python 3의 input()은 Python 2의 raw_input()이 이름만 바뀐것 뿐인데 같은 기능을 하는 것같은 sys.stdin.readline()보다 왜 느리다고 하는걸까?

결론적으로 말하면 Python 3의 input()과 sys.stdin.readline()은 별개의 기능을 하는 함수다.

  Python 3의 input()은 인수로 Prompt message를 받아서 입력을 받기 전에 이를 출력해주고, 입력을 받은 후엔 개행문자를 제거한 후에 값을 문자열로 리턴해준다.
  반면, sys.stdin.readline()은 Prompt message를 출력하지 않고 제거하지 않은 값을 문자열로 리턴해준다. 당연히 Prompt message를 출력하는 과정과 개행문자를 제거하는 과정이 생략되었기 때문에 input()보다 빠른것이다.

백준에선 input() 대신 sys.stdin.readline()만 사용하도록 하자.

728x90
반응형