언어/Python

[파이썬] 입력시간 초과

implement 2022. 12. 31. 21:10
728x90

sys.stdin.readline()

백준을 풀다 보면 이유 없이 시간초과를 당할 때가 있다. 그럴 때는 input()을 sys.stdin.readline()으로 바꾸면 시간 초과 없이 문제를 해결할 수 있다.

 

input()보다 sys.stdin.readline()이 빠른이유

  1. sys.stdin.readline()에는 input("프롬프트")와 같이 프롬프트를 출력하는 기능이 없다.
  2. 버퍼에 입력되는 방식에 차이가 있다.
    • input()은 입력하는 값 하나하나마다 버퍼에 저장한다. \n과 같은 개행 문자를 입력이 종료되는 기준으로 삼으므로 개행 문자를 생략하여 입력받을 수 있다.
    • sys.stdin.readline()은 readline이라는 이름과 같이 개행 문자를 포함한 하나의 줄을 버퍼로 입력받는다.
  3. input()은 내장함수로 취급되지만 sys에 속하는 메소드들은 file object로 취급된다. 즉, 그때그때 입력만을 받는 buffer를 만들고 읽어 들인다.

 

sys.stdin.readline()의 특징

  • 입력 크기에 제한을 줘 한번에 읽어 들일 문자의 수를 정할 수 있다.
import sys

str = sys.stdin.readline(3)
print(str)

----------------------------
입력 : hello world,  출력 : hel

 

  • import sys를 해야 한다.
  • input()은 입력이 없는데도 실행할 경우  EOFerror를 일으키는 반면, sys.stdin.readline()은 빈 문자열을 반환한다.
    • EOFerror(End Of File error) : 입력이 없을 때도 실행될 경우 발생하는 에러

 

 

참고자료 : quora.com

반응형