백준으로 입력 시간으로 인해 시간초과를 자꾸 겪게 되면서
sys.stdin.readline()을 사용하게 되는데
가끔 이 방식때문에 생기는 오류를 정확하게 짚고
다음부터는 확실히 알고 문제를 해결하기 위해서 한번 정리하고 넘어가기로 하였다.
파이썬 공식문서에 따르면
인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호작용하는 함수에 대한 엑세스를 제공합니다.
모든 대화식 입력에 사용됩니다.
readline 모듈은 파이썬 인터프리터에서 완성과 히스토리 파일의 읽기/쓰기 를 용이하게 하는 여러함수를 정의합니다.
결국 파이썬에서 읽기 쓰기를 용이하게 해주는 모듈이다
sys.stdin.readline()은 한 줄 단위로 입력을 받기 떄문에, 개행문자가 항상 같이 입력 받아집니다.
만약 1을 입력했다면 1/n이 저장된다.
다양한 예시를 통해서 보여주겠다
import sys
a = int(sys.stdin.readline())
a1,a2,a3 = map(int,sys.stdin.readline().split())
data = list(map(int,sys.stdin.readline().split()))
> 1 2 3 4
print(data)
>[1,2,3,4]
내가 sys.stdin.readline()을 사용하면서 가장 많은 에러를 발생하였던 장소로
이유를 모르고 input()으로 고치거나 갑자기 되네?? 가 가장 많았던 오류였다.
import sys
cnt = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(cnt)]
print(data)
> 2
> data1
> data2
>>['data1', 'data2']
strip()을 통해서 개행문자를 제거하지 않으면
> 2
> data1
> data2
>>['data1\n', 'data2\n']
이렇게 나올 것이다.