C/C++과 Java와 마찬가지로 Python도 더욱 빠르게 입력받는 방법이 존재합니다.
방법은 readline() 함수를 이용하는 것인데
readline() 함수를 이용하기 위해서는 파이썬 기본 라이브러리인 sys 라이브러리를 가져와야 합니다.
sys 라이브러리는 다음과 같은 방식으로 사용되며, input() 함수처럼 한 줄씩 입력받기 위해 사용합니다.
import sys
a = sys.stdin.readline().rstrip()
sys 라이브러리에서 stdin(스탠다드인) .readline() 함수를 이용합니다. rstrip() 함수를 뒤에 따로 붙여주는 이유는 readline() 함수는 입력을 받고 enter를 누르면 enter키가 줄 바꿈 기호(개행문자, \n)가 되어서 공백 문자가 오른쪽에 생기게 됩니다. 이 공백을 없애기 위해 rstrip() 함수를 사용합니다.
import sys
a = int(sys.stdin.readline())
# 숫자 9를 입력받고 enter를 누르면
# 9 + (\n)이 입력
strip() 함수에 대해 설명하기 전에 사전적 의미입니다.
strip() 함수의 3가지 종류
- 오른쪽 공백을 지워주는 rstrip()
- 왼쪽 공백을 지워주는 lstrip()
- 좌우 모든 공백을 지워주는 strip()
rstrip()
sentence = ' Strip() 함수 '
print('[' + sentence.rstrip() + ']')
rstrip() 함수 결과
[ Strip() 함수]
오른쪽 공백이 사라졌습니다.
lstrip()
sentence = ' Strip() 함수 '
print('[' + sentence.lstrip() + ']')
lstrip() 함수 결과
[Strip() 함수 ]
왼쪽 공백이 사라졌습니다.
strip()
sentence = ' Strip() 함수 '
print('[' + sentence.strip() + ']')
strip() 함수 결과
[Strip() 함수]
좌우 모든 공백이 사라졌습니다.
이제 다시 readline() 함수로 돌아오면.
readline() 함수를 사용하는 이유는 입력 데이터의 개수가 많은 문제에 input() 함수 대신 사용하기 위해서입니다. input() 함수는 동작 속도가 느려 시간 초과를 받을 수 있는 문제를 readline() 함수를 사용하면 시간 초과를 피할 수 있습니다. readline() 함수를 사용하는 경우는 정렬, 이진 탐색, 최단경로 문제 등 반복문으로 여러 줄을 연속적으로 입력받아야 할 때 유리합니다.
strip() 함수는 인자에 값을 넣어준다면 공백이외의 문자도 제거가 가능합니다. 다음 예시로 알아보겠습니다.
예시)
다음 텍스트형 데이터에서 10, 170을 추출하여 각각 저장하시오.
data = "10, '170' "
조건
- 문자열 메소드 사용
- 문자열을 숫자형으로 변환하여 저장할것
원하는 결과
[10, 170]
코드)
data = "10, '170' "
res = []
for word in data.split(','): #1
word = word.strip().strip("''") #2
res.append(int(word)) #3
print(res)
#1 : 문자열 변수 data를 ',' 를 기준으로 분리
#2 : data에서 분리된 word를 좌우 공백이 있다면 제거해주고 작은따옴표('')가 있다면 제거
#3 : #2를 마친 word를 정수형으로 res리스트에 저장 후 리스트 출력
이제 sys.stdin.readline()의 사용법을 알아보겠습니다.
1. 한개의 정수를 입력받을 때
import sys
n = int(sys.stdin.readline())
int()로 문자열로 입력받은 내용을 정수로 바꿔줌과 동시에 개행문자(/n)도 지워줄 수 있습니다.
2. 정해진 개수의 정수를 입력받을 때
import sys
a, b = map(int, sys.stdin.readline().split())
3. 여러개의 정수를 입력받아 리스트로 저장할때
import sys
arr = list(map(int,sys.stdin.readline().split()))
4. 여러개의 정수를 입력받아 2차원 배열로 저장할때
import sys
arr = [ list(map(int, sys.stdin.readline().split())) for _ in range(5) ]
# 입력값
1 2 3 4 5
6 7 8 9 0
2 3 4 5 6
7 8 9 0 1
2 3 4 5 6
# 출력결과
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [2, 3, 4, 5, 6], [7, 8, 9, 0, 1], [2, 3, 4, 5, 6]]
5. 문자열 n줄을 입력받아 리스트에 저장할때
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]
# 입력값
Hello world!
Backjoon
Samsung
# 출력값
['Hello World!', 'BackJoon', 'Samsung']
다음에 더 추가할 일이 있으면 더 보충하겠습니다.
'[Python]' 카테고리의 다른 글
[Python] 파이썬의 삼항연산자 (0) | 2022.05.20 |
---|---|
[Python] count 메서드 (0) | 2022.05.18 |
[Python] in 연산자의 사용법, 예제 (0) | 2022.05.11 |
[Python] .isdigit(), .isalpha(), .join() 함수 (0) | 2022.03.20 |
[Python] 음수 나누기에 대하여 - 개념, 방법 (0) | 2022.02.24 |