파이썬의 가장 기본적인 입력 방식으로는 input() 이라는 내장함수를 이용하는 방법이 있다.
하지만 input()의 경우 처리속도가 느리기 때문에 알고리즘 문제 풀이에서 반복문을 통해 여러 줄을 입력받는 경우 시간 초과가 발생할 수 있다.
이러한 문제를 해결하기 위한 방법으로 sys.stdin.readline()을 통해 입력을 받는 방법이 있다.
sys.stdin.readline()은 기본적으로 input()과 같은 역할을 수행하지만 몇 가지 다른 부분이 존재한다.
input()과 달리 프롬프트를 출력할 수 없다.
괄호 안에 문자열을 넣어 프롬프트를 출력하는 것이 불가능하다.import sys을 통해 'sys 모듈' 을 불러온 뒤 사용해야 한다.
sys.stdin.readline()은 파이썬 내장함수가 아니기 때문에 모듈을 불러와 사용해야 한다.sys.stdin.readline()으로 문자열을 받아오는 경우 맨 뒤에 개행문자\n이 삽입된다.
input()처럼 사용하고 싶다면 뒤에.rstrip()을 붙여 개행문자를 제거해 줄 수가 있다.
sys.stdin.readline()은 프롬프트를 출력하지 않고 개행문자를 제거하는 과정이 생략되어 있으며, 문자를 한번에 읽어와 버퍼에 저장하기 때문에 input()에 비해 처리속도가 더 빠르다는 장점이 있다.
import sys
s = sys.stdin.readline().rstrip()
sys.stdin.readline() 또한 기본적으로 'str' 자료형으로 받아오게 되므로 따로 형변환 필요없이 .rstrip()으로 개행문자만 제거해주면 된다.
import sys
n = int(sys.stdin.readline())
입력받은 값을 정수로 사용하기 위해서는 int()를 통해 형변환을 해주어야 한다.
이 경우에는 형변환 과정에서 개행문자가 제거되므로 .rstrip()을 사용하지 않아도 된다.
import sys
a, b = sys.stdin.readline().split()
여러 개의 값을 입력받을 때에는 여러 개의 변수를 ,로 구분한 뒤 .split()을 통해 공백을 기준으로 나누어 줄 수 있다.
이 경우에도 .split()을 사용할 때 개행문자가 제거되므로 .rstrip()을 사용하지 않아도 된다.
import sys
lst = sys.stdin.readline().split()
.split()을 했을 때의 자료형은 기본적으로 'list' 로 저장되므로 변수가 하나라면 리스트로 저장된다.
import sys
a, b = map(int, sys.stdin.readline().split())
여러 개의 값을 입력받은 후 map()을 이용하여 동시에 형변환이 가능하다.
import sys
lst = list(map(int, sys.stdin.readline().split()))
map()을 사용한 경우 'map' 자료형으로 변하게 되므로 리스트의 기능을 전부 이용하려면 list()를 통해 다시 'list' 자료형으로 형변환 해주어야 한다.