백준 문제를 풀다가 imput으로는 시간이 너무 많이 드는 것을 보고 시간을 단축시킬 방법이 뭔지 궁금했다.
결과부터 말하면 입력 시 input 대신 sys 모듈을 import해서 사용하는 것이다.
다음과 같이 시간이 확 줄어든 것을 볼 수 있었다.
사용방법은 간단하다. import하고 sys.stdin.readline() 라고 입력하는 것이다.
import sys
for _ in range(3):
n = int(input())
a = [int(input()) for i in range(n)]
if sum(a) == 0:
print(0)
elif sum(a) > 0:
print("+")
elif sum(a) < 0:
print("-")
import sys
for _ in range(3):
n = int(sys.stdin.readline())
a = [int(sys.stdin.readline()) for i in range(n)]
if sum(a) == 0:
print(0)
elif sum(a) > 0:
print("+")
elif sum(a) < 0:
print("-")
그럼 이 둘의 차이는 무엇일까?
input은 입력을 무조건 문자열로 받는다. 정수를 입력해도 말이다.
a = input()
print(type(a))
sys = system
stdin = standard input
(표준적으로 입력으로 받고 출력으로 보내는 데이터와 매체 총칭이다. 유닉스 쉘에서는 표준 입력이 키보드로 설정되어 있으므로 입력받는 매체는 키보드가 된다.)
readline = 한 줄씩 입력받는다.
input 내장 함수는 parameter로 prompt message를 받을 수 있다. 입력받기 전 prompt message를 출력해야하는데, sys.stdin,readline은 prompt message를 인수로 받지 않는다.
input은 rstrip()
(문자열의 끝에 있는 공백을 제거)하는 메소드가 포함되어 있다. 반면에 sys 모듈은 포함되어 있지 않아서 입력시 맨 뒤의 공백이 같이 입력될 수 있다는 단점이 있다.