-
[python] 코딩테스트 시간 초과 해결법 : input vs sys.stdin.readlineProgramming/Python 2026. 3. 19. 10:07반응형
입력 시간 문제..
파이썬으로 알고리즘 문제를 풀 때, 많은 초보자들이 습관적으로 input()함수를 사용하여 데이터를 입력받습니다.
하지만 입력 데이터가 10만개, 100만 개로 늘어나면 이 작은 습관 하나 때문에 '시간 초과' 판정을 받게 됩니다.

이 글에서는 파이썬의 기본 입력 함수인 input()과 빠른 입력 함수인 sys.stdin.readline의 차이를 내부 동작 원리와 함께 상세히 파헤쳐 보겠습니다.
1. 왜 input()은 느릴까?
파이썬의 내장 함수인 input()은 단순히 사용자의 입력을 받는 것 이상의 부가적인 작업들을 내부적으로 수행합니다.
- 프롬프트 출력 대기 : input("숫자를 입력하세요: ")처럼 사용자에게 보여줄 메시지를 화면에 띄울 준비를 합니다. 코딩 테스트에서는 화면에 메시지를 띄울 필요가 없지만, 함수 자체는 이 기능을 내포합니다.
- 문자 가공 : 사용자가 엔터를 치면 입력이 종료되는데, 이때 입력된 문자열의 맨 끝에 붙어 있는 줄바꿈 문자(\n)를 파이썬이 하나씩 확인하고 삭제한 뒤에야 반환해 줍니다.
데이터가 적을 때는 이 과정이 찰나의 순간이지만, 반복문 안에서 수십만 번 호출되면 이 "친절한 부가 기능"들이 심각한 병목 현상을 일으킵니다.
2. sys.stdin.readline의 등장
반면 sys 모듈에서 제공하는 sys.stdin.readline은 훨씬 원초적이고 빠른 방식으로 작동합니다.
- 운영체제 버퍼 통째로 읽기: 화면에 프롬프트를 띄우는 과정 없이, 운영체제가 임시로 데이터를 저장해 두는 공간인 '입력 버퍼'에서 문자열 뭉치를 있는 그대로 긁어옵니다.
- 가공 없는 날것의 데이터: input()과 달리 맨 끝의 줄바꿈 문자(\n)를 지우는 수고를 하지 않습니다. 있는 그대로 메모리에 올리기 때문에 연산 속도가 압도적으로 빠릅니다.
[운영체제] 캐시, 버퍼, 레지스터
주 기억장치 또는 중앙제어처리 장치, CPU(central processing unit) 은 시스템에서의 가장 핵심적인 역할을 수행하는 장치로, 시스템 전반을 통제하고 사용자가 명령한 명령어를 해석해 연산하는 역할
velog.io
% 운영체제 버퍼 메모리에 대한 설명 참고하세요
3. 실전 활용
매번 sys.stdin.readline()을 깊게 타이핑하는 것은 번거롭습니다. 따라서 코드 최상단에 다음과 같이 한 줄을 추가하여 기본 input을 덮어 씌우는 테크닉을 주로 사용합니다.
import sys input = sys.stdin.readline n = int(input()) arr = [] for _ in range(n): a, b = map(int, input().split()) arr.append(a+b) for result in arr: print(result)
4. 주의할 점: 남아있는 줄바꿈 문자(\n)
앞서 설명했든 sys.stdin.readline은 엔터 입력을 의미하는 \n을 그대로 가져옵니다.
- 문제없는 경우 : int()로 정수형 변환을 하거나, .split()으로 공백 기준 분리를 할 때는 파이썬이 알아서 \n을 무시하므로 신경쓰지 않아도 됩니다.
- 주의해야 할 경우 : 문자열 자체를 리스트에 저장하거나 한 글자씩 비교해야 할 때는 \n이 방해가 될 수 있습니다. 이때는 .rstrip()을 붙여서 오른쪽 공백과 줄바꿈 문자를 명시적으로 날려주어야 합니다.
import sys input = sys.stdin.readline text = input().rstrip()
5. 핵심 요약
비교 항목 input() sys.stdin.readline 동작 방식 줄바꿈 문자 삭제 등 가공 후 반환 버퍼에서 날것 그대로 읽어옴 속도 느림 매우 빠름 줄바꿈 자동으로 제거됨 문자열 끝에 포함됨 사용처 일반적인 대화형 프로그램 코딩 테스트, 대용량 데이터 처리 반응형'Programming > Python' 카테고리의 다른 글
[Python] min()/ max() 가이드 : key, default 옵션 (0) 2026.03.23 [python] 문자열 뒤집기의 모든 것 (0) 2026.03.22 [python] print()함수와 옵션들(sep, end 등) (0) 2026.03.10 [python] map() 함수 (0) 2026.03.08