파이썬으로 알고리즘을 풀다 보면 우리는 흔히 input을 사용하여 대부분 입력을 받고, print를 통해 출력을 한다. 근데, 입출력에 대한 데이터가 많을 경우에는 속도 이슈가 발생하여 백준에서도 문제를 많이 틀린다. 이럴 때 빠른 입출력을 받기 위해 사용하는 것이 sys 모듈을 사용한다. 이번 글에서는 sys 모듈을 활용한 빠른 입출력에 대해 작성한다.
1. sys.stdin.readline
파이썬에서 빠른 입력을 받을 때 우리는 sys.stdin.readline을 사용한다. input도 있는데 sys.stdin.readline을 사용하는 이유는 한 번의 경우에는 상관이 없지만, 반복문으로 값을 입력받을 경우에는 속도가 느려 시간 초과가 발생할 수 있다. 사용하는 방법은 아래와 같다.
import sys
print(sys.stdin.readline())
import sys
input = sys.stdin.readline
N = int(input())
위의 코드에서도 완벽하게 입력값을 받으려면 아래와 같이 rstrip()을 사용하여 줄바꿈 개행문자를 없애줘야 한다.
import sys
input = sys.stdin.readline
N = list(input())
M = list(input().rstrip())
print(N)
print(M)
위의 코드를 실행하면 아래와 같이, 개행 문자가 포함이 되기 때문에, 리스트로 입력을 했을 때 리스트 크기가 더 커지거나 값을 제대로 가져오지 못하는 문제가 발생한다.
즉, input()과 sys.stdin.readline의 큰 차이점은 한 번에 데이터를 읽어와서 버퍼에 저장하냐, 매번 데이터를 읽어서 버퍼에 저장하냐의 차이다. 즉, input()보다 sys.stdin.readline이 처리 속도가 더 빠르다.
2. sys.stdout.write
파이썬에서 빠른 출력을 할 때는 sys.stdout.write를 사용한다. 단, write를 사용할 경우에는 반드시 문자열을 넣어야 한다. int형 변수를 넣을 경우에는 TypeError: write() argument must be str, not int라는 에러가 발생한다. 따라서,sys.stdout.write를 사용할 경우에는 str로 변형하여 출력하면 된다.
import sys
print(sys.stdin.readline())
일반적인 print문을 사용했을 때보다 sys 모듈을 사용하여 출력했을 경우 약 0.2 차이가 난다.
import time
import sys
print = sys.stdout.write
start = time.time()
for i in range(0, 10000) :
print(str(i) + '\n')
end = time.time()
print(str(end - start) + '\n')
start2 = time.time()
for i in range(0, 10000) :
print(str(i) + '\n')
end2 = time.time()
print(str(end2-start2)+ '\n')
print(str(end - start)+ '\n')
위의 코드를 보면 기존 print() 출력함수를 사용하면 줄바꿈이 들어가지만, sys 모듈 출력함수를 사용하면 줄바꿈이 들어가지 않아 개행문자를 추가해줘야 한다.
'Language > Python' 카테고리의 다른 글
stat: path should be string, bytes, os.PathLike or integer, not list 문제 해결 방법 (0) | 2024.02.28 |
---|---|
[Python/Pandas] csv 파일 읽어올 때 앞에 0까지 읽어오는 방법 (0) | 2024.02.20 |
[PYTHON] Cython cythonize하는 방법 (0) | 2024.01.25 |
[PYTHON] No module named 'cx_oracle' 문제 해결하기 (0) | 2024.01.19 |
[백준] 백준 30394번 회전하지 않는 캘리퍼스 파이썬(Python) (0) | 2023.12.14 |
[Python] 파이썬 출력함수 print() 사용법 및 예제 (1) | 2023.12.13 |
[Python] 파이썬(Python) datetime 모듈로 날짜, 시간 처리하는 방법 (0) | 2023.12.07 |
[Python] 파이썬(Python) 특정 경로에 있는 파일 또는 폴더를 특정 경로에 복사하는 방법(glob, shutil.copy(), os.mkdir()) (0) | 2023.11.14 |
최근댓글