ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] 코딩테스트 시간 초과 해결법 : input vs sys.stdin.readline
    Programming/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
    동작 방식 줄바꿈 문자 삭제 등 가공 후 반환 버퍼에서 날것 그대로 읽어옴
    속도 느림 매우 빠름
    줄바꿈 자동으로 제거됨 문자열 끝에 포함됨
    사용처 일반적인 대화형 프로그램 코딩 테스트, 대용량 데이터 처리
    반응형
Designed by Tistory.