📌 개요
파이썬으로 알고리즘 공부를 난이도 있게 해보려 하다 보니,
아무리 봐도 더 시간을 절약할 수 없을 것 같음에도 시간 초과 문제가 발생하는 결과가 종종 발생했다.
파이썬은 나중가면 라이브러리 싸움이라는 얘기를 간혹 들어보긴 했었는데,
막상 이렇게 문제에 직면해보니 math나 numpy, scipy같이 익숙한 라이브러리 외에도
다양한 라이브러리를 알고 있는 것이 도움이 될 것 같아 관련 글들을 작성해보기로 했다.
📌 sys 라이브러리
import sys
sys 라이브러리는 기본적으로 설치되어 있어서 별도로 설치할 필요는 없었다.
python docs에 설명된 내용으로는, 이 라이브러리는 인터프리터에서 사용하는 변수나 함수를 제어할 수 있다고 한다.
sys 라이브러리에서 제공하는 다양한 함수 중, stdin에 대해서 다뤄보려고 한다.
기본적으로 파이썬에서 변수 값을 입력받을 때는 별 생각없이 아래 코드처럼 받곤 했다.
a = int(input())
b, c = map(int,input().split())
그런데 이게 변수를 조금만 받는 일이면 상관이 없는데,
알고리즘 문제들 특성상 입력을 엄청 많이 받는 일이 생기곤 한다.
그럴때도 input()을 사용하게 되면 시간초과 문제가 생기는 경우가 있다는 걸 알게 되었다.
(싸피 코테 풀때 코드 맞게 짠거 같은데 왜 안되나 했는데.. 설마..?)
그런 문제를 예방하기 위해 사용하는게 sys.stdin.readline() 이라고 한다.
사용법은 다음과 같다.
📌 sys.stdin.readline() 사용법
import sys
# 변수가 1개이고, 문자열일 경우
a = sys.stdin.readline().strip()
# 변수가 1개이고, 정수형일 경우
b = int(sys.stdin.readline())
# 변수가 여러개고, 정수형일 경우
c, d = map(int, sys.stdin.readline().split())
1. 변수가 1개이고, 문자열일 경우
- 이 경우 strip()을 따로 붙여주었는데, 그렇게 하지 않으면 여러개 변수를 입력하는 경우에 엔터를 누르는 상황에서 개행문자(\n)이 변수에 딸려들어가서 이상해지는 상황이 생기기 때문에 사용했다.
2. 변수가 1개이고, 정수형일 경우
- 이 경우는 입력받은 내용을 정수형으로 형변환하여 변수에 넣어주면 된다.
3. 변수가 여러개고, 정수형일 경우
- 이 경우 split()을 사용하여 입력받은 내용을 공백 기준으로 나누고, map()을 통해 int형으로 한꺼번해 변환해주면 된다.
📌 정리
사실 그냥 input() 자리에 sys.stdin.readline()이 들어가는 상황이나 다름이 없어서
처음에는 코드가 길어지는 과정에서 귀찮음을 느낄 수도 있을 것 같은데,
그래도 적응하는 과정을 통해서 습관을 들여야 좋을 것 같다!