파이썬에서 입력값을 받을 때 input() 함수와 sys.stdin.readline() 함수를 많이 사용한다.
알고리즘 문제를 풀다보면 input()을 사용하는 경우에는 시간 초과가 발생하고 sys.stdin.readline()을 사용하면 해결되는 경우가 있어 두 함수의 특징과 어떤 차이가 있는지 정리하였다.
input() 함수가 실행되면 사용자가 입력할 때까지 대기하며 사용자가 입력한 값을 반환해준다.
input() 함수로 입력값을 받으면 문자열로 변환하기 때문에 문자열이 아닌 다른 타입으로 받고 싶은 경우에는 명시적으로 변환해줘야한다.
n = int(input()) # string -> int
for i in range(n):
print(n)
python의 표준 라이브러리인 ‘sys’ 모듈에서 제공되는 함수로 sys.stdin 파일 객체에서 한 줄씩 읽어 프롬프트를 직접 출력해서 사용해야한다.
sys.stdin.readline() 함수도 기본적으로 문자열로 읽어오기 때문에 다른 타입으로 사용하고 싶을 시 변환해줘야한다.
import sys
n = int(sys.stdin.readline()) # string -> int
방법은 input() 함수를 다루는 것과 비슷하다.
import sys
n, m = map(int, sys.stdin.readline().split()) # 띄어쓰기로 문자열을 나눠줌
print("n =", n, " m =", m)
➡️ 입력
1 2
➡️ 출력
n = 1 m = 2
import sys
n = list(map(int, sys.stdin.readline().split()))
print("n =", n)
➡️ 입력
1 2 3 4 5 6 7 8
➡️ 출력
n = [1, 2, 3, 4, 5, 6, 7, 8]
\n
’) 제거하는 방법 - strip()import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline() for i in range(n)]
data_strip = [sys.stdin.readline().strip() for i in range(n)]
print(data)
print(data_strip)
strip()을 사용하면 아래와 같이 줄 바꿈 문자가 지워짐을 확인할 수 있다.
➡️ 입력
4
안녕
하세요
반갑
습니다
안녕
하세요
반갑
습니다
➡️ 출력
['안녕\n', '하세요\n', '반갑\n', '습니다\n']
['안녕', '하세요', '반갑', '습니다']
\n
’)은 제거시키고\n
’을 포함한 문자열을 반환한다.사용자로부터 하나의 값만 입력받고 싶은 경우에는 input() 함수를 사용해도 무방하지만 for문을 돌린다던지 반복적으로 사용자에게 입력을 받아야 하는 경우에는 sys.stdin.readline()을 사용하는 것이 적합하다.