[Python] input()과 sys.stdin.readline()

Erin Lee·2024년 3월 12일
1

input()과 sys.stdin.readline()

파이썬에서 입력값을 받을 때 input() 함수와 sys.stdin.readline() 함수를 많이 사용한다.

알고리즘 문제를 풀다보면 input()을 사용하는 경우에는 시간 초과가 발생하고 sys.stdin.readline()을 사용하면 해결되는 경우가 있어 두 함수의 특징과 어떤 차이가 있는지 정리하였다.


1. input()

input() 함수가 실행되면 사용자가 입력할 때까지 대기하며 사용자가 입력한 값을 반환해준다.

input() 함수로 입력값을 받으면 문자열로 변환하기 때문에 문자열이 아닌 다른 타입으로 받고 싶은 경우에는 명시적으로 변환해줘야한다.

n = int(input()) # string -> int
for i in range(n):
	print(n)

2. sys.stdin.readline()

python의 표준 라이브러리인 ‘sys’ 모듈에서 제공되는 함수로 sys.stdin 파일 객체에서 한 줄씩 읽어 프롬프트를 직접 출력해서 사용해야한다.

sys.stdin.readline() 함수도 기본적으로 문자열로 읽어오기 때문에 다른 타입으로 사용하고 싶을 시 변환해줘야한다.

import sys
n = int(sys.stdin.readline()) # string -> int

2-1. sys.stdin.readline() 사용 방

방법은 input() 함수를 다루는 것과 비슷하다.

  • 여러 입력값을 한번에 입력받는 방법 - map()
import sys

n, m = map(int, sys.stdin.readline().split()) # 띄어쓰기로 문자열을 나눠줌
print("n =", n, " m =", m)

➡️ 입력

1 2

➡️ 출력

n = 1  m = 2
  • 여러 입력값을 list에 저장하는 방법 - list()
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']
['안녕', '하세요', '반갑', '습니다']

3. input()과 sys.stdin.readline() 비교

  • input()과 sys.stdin.readline() 모두 사용자의 입력을 문자열 형태로 변환하여 받지만
    input()은 사용자가 입력한 줄 바꿈 문자(’\n’)은 제거시키고
    sys.stdin.readline()은 ‘\n’을 포함한 문자열을 반환한다.
  • input()은 사용자가 입력을 마치기 전까지 멈추고 대기하지만
    sys.stdin.readline()은 무한히 대기하지 않고 입력을 마치지 않아도 계속 진행된다.
    → 한 줄 한 줄 읽는 방식으로 한 줄을 읽을 때까지만 대기하고 입력 버퍼에 있는 모든 데이터를 읽지 않는다.
  • input()은 사용자가 한 줄씩만 입력을 할 수 있지만
    sys.stdin.readline()은 사용자가 한번에 여러 줄의 입력을 읽을 수 있기 때문에 많은 대용량 데이터를 처리하기에는 더 빠른 속도를 보인다.

4. 결론

사용자로부터 하나의 값만 입력받고 싶은 경우에는 input() 함수를 사용해도 무방하지만 for문을 돌린다던지 반복적으로 사용자에게 입력을 받아야 하는 경우에는 sys.stdin.readline()을 사용하는 것이 적합하다.

profile
내가 설명할 수 있어야 비로소 내가 아는 것이다

0개의 댓글