python: input(), sys.stdin.readline()의 차이

Frog_log·2024년 9월 16일

input()

기능: 표준 입력에서 한 줄의 문자열을 읽어옵니다.
사용법: input() 함수는 사용자가 입력한 한 줄의 문자열을 반환합니다.
자동 개행 제거: input() 함수는 입력된 문자열의 끝에 있는 개행 문자(\n)를 자동으로 제거합니다.
편리성: 간단한 입력을 받을 때 사용하기 편리합니다.
속도: sys.stdin.readline()에 비해 상대적으로 느립니다. 특히 많은 양의 입력을 받을 때 차이가 커집니다.

# input()을 사용하여 입력받기
n = int(input())  # 정수 입력
data = input().split()  # 공백으로 구분된 문자열 입력

sys.stdin.readline()

기능: 표준 입력에서 한 줄의 문자열을 읽어옵니다.
사용법: sys.stdin.readline() 함수는 입력된 한 줄의 문자열을 그대로 반환합니다.
개행 문자 포함: sys.stdin.readline() 함수는 입력된 문자열의 끝에 있는 개행 문자(\n)를 포함하여 반환합니다. 따라서 필요에 따라 개행 문자를 제거해야 합니다.
속도: input()에 비해 빠릅니다. 특히 많은 양의 입력을 받을 때 유리합니다.
사용 예: 많은 양의 데이터를 빠르게 입력받아야 할 때 사용합니다.

import sys
# sys.stdin.readline()을 사용하여 입력받기
n = int(sys.stdin.readline().strip())  # 정수 입력
data = sys.stdin.readline().strip().split()  # 공백으로 구분된 문자열 입력

알고리즘을 풀다보면, 가끔 입력값을 제대로 받지 않아서 시간초과가 발생하곤 한다.

시간초과는 입력받는 방식에 따라 다른데, 왜 속도의 차이가 발생하는 걸까?

1. 버퍼링 방식

input():
input() 함수는 표준 입력에서 한 줄을 읽어올 때 내부적으로 많은 작업을 수행합니다.

  • 입력을 받을 때마다 표준 입력 스트림을 버퍼링하고, 개행 문자를 제거하는 등의 추가 작업을 수행합니다.
  • 이러한 추가 작업들은 입력을 받을 때마다 반복되므로, 많은 양의 데이터를 처리할 때 시간이 더 많이 소요됩니다.

sys.stdin.readline():

  • sys.stdin.readline() 함수는 표준 입력에서 한 줄을 읽어올 때, 단순히 입력 스트림에서 데이터를 읽어옵니다.
  • 개행 문자를 포함한 전체 문자열을 반환하므로, 추가적인 처리가 필요하지 않습니다.
    따라서, 입력을 받을 때마다 반복되는 작업이 적고, 더 빠르게 동작합니다.

2. 함수 호출 오버헤드

input():
input() 함수는 Python의 내장 함수로, 호출 시 추가적인 오버헤드가 발생합니다. 특히, 많은 양의 데이터를 처리할 때 이러한 오버헤드가 누적되어 성능에 영향을 미칠 수 있습니다.

sys.stdin.readline():
sys.stdin.readline() 함수는 표준 입력 스트림에서 직접 데이터를 읽어오므로, 함수 호출 오버헤드가 상대적으로 적습니다. 따라서, 많은 양의 데이터를 처리할 때 더 효율적입니다.

3. 개행 문자 처리

input():
input() 함수는 입력된 문자열의 끝에 있는 개행 문자(\n)를 자동으로 제거합니다. 이 과정에서 추가적인 문자열 처리가 필요하며, 이는 성능에 영향을 미칠 수 있습니다.

sys.stdin.readline():
sys.stdin.readline() 함수는 개행 문자를 포함한 전체 문자열을 반환하므로, 추가적인 처리가 필요하지 않습니다. 필요에 따라 개행 문자를 제거할 수 있지만, 이는 사용자가 명시적으로 처리할 수 있습니다.

profile
신입 개발자

0개의 댓글