티스토리 뷰

728x90

알고리즘을 풀다보면 로직이 맞는 데도 불구하고 시간 초과가 뜨는 경우가 있습니다.

이 경우 하나 확인해야할 것이 바로 입력 혹은 출력해야하는 데이터의 개수가 많은지 확인해봐야합니다.

만약 입출력해야될 데이터가 평소에 푸는 문제보다 많다면 input()과 print()의 속도가 느려서 그럴 수 있습니다.

이럴 때는 sys 라이브러리의 readline()과 write()를 사용하면 해결될 수 있습니다.

이번 포스팅에서는 파이썬 빠른 입출력에 대해서 작성하고자 합니다.

 

#sys 라이브러리 사용
import sys

#빠른 입력
n = sys.stdin.readline()

#빠른 출력
sys.stdout.write(answer)

빠른 입력은 sys.stdin.readline()을 사용하면 됩니다.

주의할 점은 엔터를 줄 바꿈 기호로 받아들이기 때문에 제거해주기 위해서 rstrip()함수를 같이 사용하는 편입니다.

*rstrip()은 인자로 주어진 여러 문자와 동일한 것들을 오른쪽에서 동일하지 않은 문자가 나올 때까지 제거하는 함수입니다.(자세한 건 strip(), lstrip()과 함께 따로 포스팅을 하겠습니다.)

 

입력
5
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0

 

약간 응용한다면 위처럼 공백으로 분리된 여러 정수를 여러번 입력받아서 리스트에 저장하는 코드는 다음과 같습니다.

import sys

n = int(input())
data = [list(map(int, sys.stdin.readline().rtrip().split())) for _ in range(n)]

 

 

빠른 출력을 지원하는 sys.stdout.write()도 한가지 주의할 점이 있습니다.

print()와 다르게 줄바꿈(개행 문자 \n)을 직접 해주어야 합니다.

import sys

print("Hello, ")
print("world!")
>Hello, 
>world!

sys.stdout.write("Hello, ")
sys.stdout.write("world!")
>Hello, world!

sys.stdout.write("Hello, \n")
sys.stdout.write("world!")
>Hello, 
>world!

 

 

가끔 input과 print를 덮어서 쓰는 사람도 있습니다.

import sys

input = sys.stdin.readline
print = sys.stdout.write

n = input()
print(n, "\n")
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함