문제
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
입력
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
출력
각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
내 제출
import sys
T = int(input())
for i in range(T):
a,b = map(int,sys.stdin.readline().strip().split())
print(a+b)
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
a,b = map(int,input().strip().split())
print(a+b)
위의 형태로도 sys.stdin.readline 사용이 가능하다.
sys.stdin.readline이란
이 함수는 파이썬에서 입력을 받기 위해 사용하는 함수 중 하나이며, sys 모듈을 import 해야 사용할 수 있다. 주로 코딩 테스트에서 많이 활용되고, 대량의 입력을 처리할 때에 사용되는 메서드라고 할 수 있다. 위 코드와 같이 사용해주면 된다.
sys.stdin.readline을 사용하는 이유
대량의 데이터를 입력받을 때,
입출력 방식에 차이가 있다. input() 함수는 사용자에게 입력을 요청하고 그에 대한 답을 들으며 진행되는 함수로, 상호작용을 하기 위해 함수가 어느 정도 기다리기 때문에 상대적으로 속도가 느리다. 반대로, sys.stdin.readline() 함수는 표준 입력에서 한 줄을 읽어오는 것은 동일하지만 엔터키를 누를 필요 없이 바로 한줄을 읽어온다. 그렇기 때문에 상대적으로 속도가 빨라지게 된다.
input('메시지를 입력해주세요')
input 안에 있는 텍스트를 '프롬프트 메시지'라고 한다.
그러나 sys.stdin.readline() 은 프롬프트 메시지가 없다. 이것이 input()보다 빠른 이유 중 하나이다.또 파이썬에서는 입력을 받을 때 개행 문자(\n)이 같이 딸려온다. sys.stdin.readline()은 개행문자를 안 떼고 그냥 받는다. 그래서 sys.stdin.readline()으로 받고 나면 항상 rstrip()이나 strip()메소드가 따라와야 한다.
rstrip()은 개행문자를 떼 주고, strip()은 공백을 떼버린다.
즉, sys.stdin.readline()이 빠른 이유는
1. 개행문자를 안 땜
2. 프롬프트 메시지도 안 받음