본문 바로가기

# Language/Python

[Python] 파이썬 입력 함수 비교: input() VS sys.stdin.readline()

파이썬 입력 함수 비교: input() VS sys.stdin.readline()

 

input()과 sys.stdin.readline() 함수의 동작 방식과 성능을 비교해보자.

 

파이썬에서는 기본적으로 input() 함수를 사용하여 사용자로부터 입력을 받을 수 있다.

하지만, 대량의 입력을 처리해야 할 때나 알고리즘 문제를 풀 때, input() 함수는 속도 측면에서 비효율적이다.

 

이러한 상황에서는 보통 sys.stdin.readline() 함수를 사용하여 입력을 받는다.

 

input() 함수

동작 방식

input() 함수는 사용자로부터 입력을 받을 때까지 프로그램이 멈추고 대기한다.

 

사용자가 입력을 완료하고 엔터(또는 리턴)를 누를 때까지 대기 상태에 있으며, 사용자의 입력을 문자열로 반환한다.

 

이때, 입력된 값에 대한 추가적인 처리 없이 문자열 그대로 반환되므로,

데이터 타입 변환 등이 필요한 경우 개발자가 직접 처리해야 한다.

 

사용법 및 예제

# 사용자로부터 이름 입력 받기
name = input("이름을 입력하세요: ")
print("안녕하세요, " + name + "님!")

 

시간 복잡도와 입력 처리 성능

input() 함수는 단일 문자열을 반환하므로 입력 처리 속도 자체는 빠르다.

 

하지만 대량의 입력이 필요한 경우,

입력마다 사용자의 엔터 입력을 기다려야 하기 때문에 입력 속도가 느려질 수 있다.

특히 알고리즘 문제 풀이와 같이 반복적으로 여러 입력을 처리해야 할 때는 성능이 저하될 수 있다.

 

시간 초과 발생 가능성

대량의 입력을 처리하는 경우 input() 함수는 시간 초과 문제가 발생할 수 있다.

 

예를 들어, 입력의 개수가 많거나 반복문 안에서 여러 번 입력을 받는 경우,

입력 대기 시간이 누적되어 프로그램 실행 시간이 증가하여 시간 초과가 발생할 수 있다.

 

 

sys.stdin.readline() 함수

동작 방식

sys.stdin.readline()은 sys.stdin 파일 객체를 통해 한 줄을 읽어온다.

input() 함수와는 달리 사용자의 엔터 입력을 기다리지 않고 빠르게 입력을 처리한다.

 

sys.stdin.readline() 함수 역시 입력을 문자열로 반환한다.

 

사용법 및 예제

import sys

# 사용자로부터 숫자 입력 받기
number = int(sys.stdin.readline().strip())
print("입력한 숫자:", number)

 

readline()은 줄 바꿈 문자(개행 문자)까지 포함하여 한 줄을 읽어오므로.

상황에 따라 개행문자를 제거해주어야 한다.

import sys

# 한 줄 입력 받기
line = sys.stdin.readline().strip()

 

시간 복잡도와 입력 처리 성능

input() 함수와는 달리 입력 대기 시간이 없기 때문에 대량의 입력을 빠르게 처리할 수 있다.

특히 루프 안에서 반복적으로 입력을 받아야 할 때 성능 향상을 기대할 수 있다.

 

input()과의 성능 비교

input() 함수와 성능을 비교할 때, 입력 데이터의 양이 많은 경우에 뚜렷한 차이가 생긴다.

 

대량의 입력 데이터를 처리할 때 input() 함수는 입력 대기 시간 때문에 상대적으로 느리게 동작하므로,

sys.stdin.readline() 함수를 사용하면 시간을 절약할 수 있다.