(python) - 입출력 시간 초과 해결법

Chooooo·2023년 1월 31일
0

에러

목록 보기
1/4

백준, 프로그래머스 , codeforce, leetcode같은 online judge에서 문제를 풀다가 입출력부분에서 시간초과가 나는 경우가 꽤 흔하다. 심지어 입출력을 빠르게 수행하도록 하는 코드부분만 바꿨을때 맞는 경우도 존재한다.

이를 해결할 방법과 이유에 대해 알아보자.

input()

input()은 raw_input()을 evaluate한 결과를 반환.
인자가 없다면 입력으로부터 한 줄을 읽고 문자열로 변환 후(개행제거 후) 반환한다.

이 과정을 요약한다면,

input() : 사용자의 입력을 받고 → 문자열로 변환 → 추가 strip 진행 과정을 거치게 된다.

input()은 한편 사용자로부터 입력을 받기 전 대기를 위한 prompt를 가지고 있습니다. 때문에 많은 여러줄의 입력을 받는 경우에는 한줄 입력을 받기 -> 단계 수행 -> 대기(prompt) 를 반복하게 된다 !!

sys.stdin.readline()

stdin 은 standard input을 말한다. input()과 비슷한 기능을 수행하지만 약간 다르다. 해당 함수를 사용하기 위해선 sys를 import해서 사용해야 한다.

sys.stdin.readline()은 사용자의 입력을 받지만 개행 문자도 입력을 받을 수 있는 장점이 있다. 또한 입력 크기에 제한을 줌으로써 한번에 읽어들일 문자의 수를 정할 수 있습니다. 그 문자의 수는 readline함수의 인자로 들어갈 수 있다.
sys.stdin.readline(5) → 문자의 개수를 조정할 수 있다.

해결방법

알고리즘 최적화를 전제로 input() 대신 sys.stdin.readline()을 이용하자.

+++ input = sys.stdin.readline을 설정했을 때

  • 문자열을 읽을 때 줄바꿈 기호까지 읽으므로..

data = input().rstrip()로 읽어준다.(문자열을 읽을 때는 꼭 이렇게 !!)

input = sys.stdin.readline을 코드 제일 위에 추가한다면, input이 sys.stdin.readline의 속도를 갖게 된다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글