하루한줄 코딩일기
[Python] input()과 sys.stdin.readline()의 차이 본문
input()과 sys.stdin.readline()의 차이
백준 알고리즘 문제들을 풀다 보면 sys.stdin.readline()을 사용해 자료를 입력받을 경우 input() 함수를 사용했을 때보다 처리 속도가 향상되는 것을 볼 수 있다. 또한, 시간 초과로 인한 오답이 발생하는 경우 input() 함수 대신 readline()을 사용하는 것 만으로 문제가 해결되는 경우가 많다. 아래 사진에서 볼 수 있듯이 두 방식에는 속도 차이가 확연히 나타는데, 그렇다면 이 두 입력받기 방식의 차이점은 무엇이고 속도 차이가 발생하는 이유는 무엇일까?
input()
- 파라미터로 프롬프트 메시지를 받을 수 있어, 입력받기 전 프롬프트 메시지를 출력함
- 캐릭터 단위로 읽어들여 속도가 느림
- 개행문자(enter)를 제거하여 반환함
input_test_num = input("숫자를 입력하세요: ")
print(input_test_num)
input_test_str = input("문자열을 입력하세요: ")
print(input_test_str)
# Printing type of input value
print ("\ntype of number", type(input_test_num))
print ("type of string", type(input_test_str))
# 특정 형식을 지정하지 않으면 string 타입으로 입력받음
sys.stdin.readline()
- 프롬프트 메시지 X
- 사이즈를 지정해서 읽어올 수 있음
- 한 줄을 통째로 읽어들여 비교적 속도가 빠름 (특히, 입력이 반복될 수록 확연한 속도 차이를 보임)
- 하지만 줄 단위로 읽어 오기에, 개행문자를 제거하지 않고 반환함 (.rstrip으로 제거)
import sys
readline_test_num = sys.stdin.readline()
print(readline_test_num)
readline_test_str = sys.stdin.readline(2)
print(readline_test_str)
# Printing type of input value
print ("\ntype of number", type(readline_test_num))
print ("type of string", type(readline_test_str))
[참고] Difference between input() and sys.stdin.readline()
결론
평소 나는 편리함을 위해 고민도 없이 input() 함수를 택하곤 했다. 하지만 간혹 시간 초과가 발생하는 경우, 혹은 반복되는 입력을 받아야 하는 경우 sys.stdin.readline()을 사용하는 것이 유리하기에, 두 가지 입력받기 방식 모두 사용할 줄 알아야겠다.
'Languages. > Python' 카테고리의 다른 글
[Python] 정규표현식 re.sub을 이용한 문자열 치환하기 (0) | 2022.02.16 |
---|---|
[Python] 순열(permutations)과 조합(combinations) 구현하기 (0) | 2022.02.14 |
[Python] TypeError: 'dict_values' object is not subscriptable (0) | 2022.02.02 |
[Python] TypeError: 'int' object is not callable (0) | 2022.01.26 |
Comments