파이썬에서 입력을 받을 때 가장 성능이 좋은 sys.stdin의 세 가지 활용법을 비교해 보겠습니다. 모든 방식은 공통적으로 줄 바꿈 문자(\n)를 포함한다는 점을 기억하세요!
1. sys.stdin.readline() : 딱 한 줄만 읽기
import sys
# 한 줄 읽기
line = sys.stdin.readline()
print(f"입력받은 문장: {line.strip()}") # strip()으로 \n 제거 가능
- 이 방식은 입력 스트림에서 한 줄만 가져와 문자열로 반환합니다.
- 특징 : 호출할 때마다 한 줄씩 읽습니다.
- 장점 : 메모리 효율이 아주 좋습니다. (딱 필요한 만큼만 읽기 때문)
- 단점 : 여러 줄을 읽으려면 반복문(for/while)을 직접 돌려야 합니다.
2. sys.stdin.readlines() : 모든 줄을 리스트로 한 번에!
import sys
# 모든 줄을 리스트로 읽기
lines = sys.stdin.readlines()
print(f"전체 리스트: {lines}")
print(f"첫 번째 줄: {lines[0].strip()}")
- 이 방식은 입력의 끝(EOF)까지 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트를 반환합니다.
- 특징 : 전체 데이터를 한꺼번에 메모리에 올립니다.
- 장점 : 리스트로 반환되기 때문에 인덱싱(lines[0])이나 슬라이싱이 자유롭습니다.
- 단점 : 데이터 양이 매우 크다면(예: 수백만 줄), 메모리 부족이 발생할 위험이 있습니다.
3. for line in sys.stdin : 가장 효율적인 반복문
import sys
# 제너레이터 방식으로 한 줄씩 처리
for line in sys.stdin:
print(line.strip()) # 개행 문자(\n)가 포함되기 때문에 제거
- sys.stdin 객체 자체를 반복문에 넣는 방식입니다. 파이썬의 이터레이터(Iterator) 특징을 활용합니다.
- 특징 : 내부적으로 버퍼링을 사용해 한 줄씩 가져옵니다.
- 장점 : readlines() 처럼 모든 데이터를 메모리에 올리지 않으면서도, readline() 처럼 직접 반복 횟수를 제어할 필요가 없어 가장 파이썬답고 효율적인 방식입니다.
- 단점 : 한 번 읽으면 다시 뒤로 돌아갈 수 없습니다. (단방향)
- 문제 팁 : 문자열을 인식해 리스트로 만드는 등의 작업을 할때 strip() 메서드를 추가하여 반드시 개행문자를 제거해줘야 에러가 발생하지 않는다.
사용 목적 및 추천
- 데이터가 작고 인덱스로 접근해야 한다면 -> readlines()
- 데이터가 방대하거나 메모리를 아껴야 한다면? -> for line in sys.stdin
- 첫 번째 줄엔 N(개수), 그 다음 줄부터 데이터가 온다면? -> readline()으로 N을 먼저 읽고, 나머지는 for문 활용
--------------------------------------------
* 이 글은 Gemini 3 모델을 활용해 작성되었습니다.
--------------------------------------------
'프로그래밍 > Coding' 카테고리의 다른 글
| [기초문법] 우선순위큐 (feat. heap) (0) | 2026.01.18 |
|---|---|
| [기초문법] Python Counter object (0) | 2026.01.16 |
| [기초문법] sys.stdin.readline (feat. input()) (0) | 2025.12.29 |
| [자료구조] 깊이우선탐색(DFS) vs 너비우선탐색(BFS) (0) | 2025.02.02 |
| [자료구조] 최단거리 알고리즘 문제 정리 (0) | 2025.01.30 |