🧵 Python 고속 입력 처리법:
io.BufferedReader(io.FileIO(0), 1 << 18).readline은 왜 빠를까?
Python으로 알고리즘 문제를 풀 때 input()이나 sys.stdin.readline()이 너무 느려서 시간 초과가 나는 경우가 있다.
그럴 때 등장하는 구문이 바로 아래 코드다.
import io
input = io.BufferedReader(io.FileIO(0), 1 << 18).readline
이 구문은 무려 최대 10배 이상 빠른 입력 처리가 가능하다.
왜 이렇게 빠른지 아래에서 구조와 원리를 상세히 설명한다.
🧠 Python 표준 입력은 어떻게 동작할까?
Python의 입력은 보통 다음처럼 동작한다:
input(): 한 줄 읽고 문자열 반환sys.stdin.readline(): 조금 더 빠르게 문자열 반환
이 방식들은 내부적으로:
- 운영체제의 stdin에서 한 줄 읽음
- UTF-8 디코딩
- Python 문자열 객체로 변환
→ 매우 고수준 처리라서 속도가 느릴 수 있다.
⚡ 고속 입력 처리의 핵심: BufferedReader + FileIO
BufferedReader(io.FileIO(0), 1 << 18)는 다음처럼 작동한다:
FileIO(0): 운영체제의 표준입력(파일 디스크립터 0)을 직접 염BufferedReader(..., 1 << 18): 256KB 버퍼에 한 번에 대량 읽기.readline(): 버퍼에서 빠르게 한 줄 반환
📊 성능 비교 표
| 입력 방식 | 설명 | I/O 오버헤드 | 디코딩 | 속도 |
|---|---|---|---|---|
input() |
기본 파이썬 입력 | 높음 | 있음 | ❌ 느림 |
sys.stdin.readline() |
중간 수준 | 보통 | 있음 | ⏳ 보통 |
BufferedReader(FileIO(...)) |
저수준 + 대용량 버퍼 | 매우 낮음 | 없음 | ✅ 매우 빠름 |
🧬 입력 처리 구조 다이어그램
📎 일반 입력 구조 (input())
[ 운영체제 stdin ]
↓ (한 줄씩 읽음)
[ Python 해석기: 디코딩 & 객체 생성 ]
↓
사용자 코드(input())
🚀 고속 입력 구조 (BufferedReader(FileIO(...)))
[ 운영체제 stdin (fd 0) ]
↓
[ FileIO - 저수준 접근 ]
↓
[ BufferedReader (256KB 버퍼)]
↓
사용자 코드 (readline 호출)
✅ 예제 코드
import io
input = io.BufferedReader(io.FileIO(0), 1 << 18).readline
n = int(input())
for _ in range(n):
data = list(map(int, input().split()))
→ 대량의 숫자 입력에서도 시간 초과 없이 안정적으로 처리 가능
📌 언제 써야 할까?
- 입력 데이터가 수십만~수백만 줄일 때
- 백준/코딩 테스트에서 시간제한이 빡빡할 때
sys.stdin.readline마저 느릴 때
✅ 결론
BufferedReader(FileIO(0), 1<<18)은 운영체제 레벨의 입력을 한 번에 많이 읽어 버퍼에 저장하고,
readline()을 통해 빠르게 줄 단위로 꺼내 쓰는 고속 입력 방식이다.
💡 요약 한 줄:BufferedReader + FileIO는 stdin을 대용량으로 미리 받아
파이썬이 빠르게 소비할 수 있게 해주는 초고속 입력 전략이다.

'Tech > Coding' 카테고리의 다른 글
| 파이썬 heapq.heapreplace 동작 원리 (0) | 2025.04.12 |
|---|---|
| 파이썬 heapq : 힙큐 사용법 정리 (0) | 2025.04.11 |
| RSA 암호화와 모듈러 연산 개념 정리 (0) | 2025.04.05 |
| RSA 암호화 알고리즘의 원리와 예시 (0) | 2025.04.05 |
| PS(Problem Solving)에서의 컨볼루션과 컴퓨터 비전(CV, Computer Vision)에서의 컨볼루션 (0) | 2025.03.31 |