백준 입출력 문제를 풀면서 가장 신경써야했던 부분은 '제한시간'이였다.
Python의 경우 입력을 받을 수 있는 방법이 대표적으로 2가지가 있는데 input() 과 sys.stdin.readline() 이다.
sys.stdin.readline을 사용하면 더 빠르게 처리할 수 있다.
input()은 입력으로터 한 줄을 읽은 뒤, 그 때 발생한 개행문자(\n)을 없애고 문자열로 변환한 후 return 한다. EOF을 읽으면 EOF에러를 읽으킨다.
EOF(End of file)이란?
파일의 끝을 의미하며 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타낸다. C언어에서는 EOF는 -1이라는 상수값을 가지고 있다.
일단, sys 모듈은 Python 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다.
stdin 은 Python 인터프리터가 표준 입력에 사용하는 파일 객체, readline() 은 파일 객체의 메소드 중 하나로 read(), readlines() 와 같이 파일 객체를 읽을 때 사용한다.
즉, sys.stdin.readline() 은 sys 라는 모듈의 파일 객체 stdin 의 메소드 중 readline() 을 사용한다는 의미이다. readline() 은 입력을 읽을 때 한 번에 한 줄씩 읽는데, 이 말은 여러 줄의 입력이 있을 때 한 줄을 읽고 나면 그 다음 줄을 가리킨다는 뜻이다.
1. 문자열을 받을 때
import sys
sentence = sys.stdin.readline()
sys.stdin.readline()은 return값이 문자열이므로 그냥 문장을 하나 받을 때 사용가능하다.
sys.stdin.readline()을 출력하면 문자열에 개행문자(\n)가 기본으로 추가됨도 확인 가능하다.
2. 정수를 받을 때
import sys
number = int(sys.stdin.readline())
그냥 sys.stdin.readline()의 return 값은 문자열(string)이기 때문에 정수로 입력받으려면 형변환을 해줘야한다.
sys.stdin.readline()으로 받은 문자열은 개행문자(\n)을 포함한다.
문자열을 int()로 형변환을 해주면 개행문자는 사라지고 정수형태만 남는다.
3. 여러 개의 정수들을 받을 때
import sys
a,b = map(int,sys.stdin.readline().split())
map()은 반복 가능한 객체(리스트 등)에 대해 각각의 요소들을 지정된 함수로 처리해주는 함수입니다.
위와 같이 사용한다면 a,b,c에 대해 각각 int형으로 형변환을 할 수 있습니다.
4. 문자열 N개를 입력 받아 리스트에 저장할 때
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]
문자열을 N개 라고 지정되어있는 경우 for문을 사용해 문자열 N개를 리스트에 저장할 수 있다.
여기서 strip()은 문자열 앞과 끝의 공백문자를 제거해주는 함수다.