Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- serializtion
- git
- 파이썬
- xapi
- useRef
- JUnit5
- 테스트
- Runwith
- 소스코드품질
- LRS
- 데이터 직렬화
- 알고리즘
- 일기
- playgroundAI
- notempty
- JUnit
- 데이터 거버넌스
- application.yml
- 코딩테스트
- 부하 테스트
- 연계방식
- diary
- git 오류
- 스택
- 백준
- Live Template
- 정적분석도구
- extendwith
- AI그림
- 영어일기
Archives
- Today
- Total
HanSol's Oak Cask
코딩테스트를 위한 sys 모듈 (파이썬) 본문
sys는 파이썬 내장 모듈 중 하나로, os모듈 안에 있으며, 파이썬 인터프리터와 관련된 시스템 관련 기능을 제공한다.
📌 코딩테스트에서 유용한 sys 모듈 함수 총정리 (필수 함수만 포함)
💡 코딩테스트에서 실제로 사용 빈도가 높은 sys 모듈 함수만 선별하여 설명
설명 + 사용 목적 + 예제 + 코딩테스트에서의 활용 팁 포함
🔹 1. sys.stdin.readline() – 빠른 입력 처리
✅ 설명
- 표준 입력을 빠르게 읽어들이는 함수
- input()보다 훨씬 빠름 (특히 반복문과 대규모 입력 시 유리)
- 반환값에 **개행 문자(\n)**가 포함되므로 .strip() 사용 권장
🔥 사용 예제
import sys
n = int(sys.stdin.readline().strip())
arr = list(map(int, sys.stdin.readline().strip().split()))
💡 활용 팁
- 입력이 10^5 이상인 경우 반드시 사용
- 여러 줄 입력 시 효율적 (e.g., 그래프 인접 리스트, 대량 수열)
🔹 2. sys.stdout.write() – 빠른 출력 처리
✅ 설명
- 표준 출력에 문자열을 빠르게 출력
- print()보다 빠름 (내부 형식 처리와 개행 처리 없음)
- 자동 개행 없음 → \n을 수동으로 추가해야 함
🔥 사용 예제
import sys
sys.stdout.write("Hello\nWorld\n")
💡 활용 팁
- 수십만 줄 이상의 출력 시 print() 대신 사용
- 리스트 출력 시:
sys.stdout.write("\n".join(map(str, arr)) + "\n")
🔹 3. sys.exit() – 프로그램 즉시 종료
✅ 설명
- 현재 프로그램 실행을 즉시 중단
- 불필요한 연산 방지 및 조건 불충족 시 빠른 탈출 용도
🔥 사용 예제
import sys
n = int(sys.stdin.readline().strip())
if n < 0:
print("Invalid input.")
sys.exit() # 즉시 종료
print("양수:", n)
💡 활용 팁
- 조건부 중단이 필요한 문제(예: 실패 조건 충족 시 출력 후 종료)
- 불필요한 루프 탈출 시 최적화
🔹 4. sys.setrecursionlimit() – 재귀 깊이 설정
✅ 설명
- 파이썬의 기본 재귀 깊이 제한은 1000
- DFS, 백트래킹 등의 알고리즘에서 RecursionError 방지
🔥 사용 예제
import sys
sys.setrecursionlimit(10**6) # 깊은 재귀 호출 허용
def dfs(node):
for next_node in graph[node]:
dfs(next_node)
💡 활용 팁
- 재귀형 DFS, 트리 탐색 문제에서 필수
- 과도하게 높게 설정하면 스택 오버플로우 위험 → 필요할 때만 사용
🔹 5. sys.argv – 명령행 인자 전달
✅ 설명
- 명령행 인자를 리스트 형태로 전달
- 코딩테스트에서는 드물게 사용되지만, 특정 실행 환경에서 필요할 수 있음
🔥 사용 예제
import sys
print(sys.argv) # 실행 시: python script.py arg1 arg2
💡 활용 팁
- 일반적인 코딩테스트에서는 사용 빈도 낮음
- 환경 설정 문제에서 활용될 수 있음
🔹 6. sys.maxsize – 최대 정수 크기 반환
✅ 설명
- 파이썬에서 플랫폼별 최대 정수값 반환
- 무한대 대체값으로 활용 (float('inf') 대신 사용 가능)
🔥 사용 예제
import sys
INF = sys.maxsize
dist = [INF] * 1000 # 최단 거리 초기화 시 사용
💡 활용 팁
- 다익스트라, 벨만-포드 등의 최단 거리 알고리즘에서 무한대 값으로 사용
📌 비교: input()/print()와 sys 함수의 속도 차이
함수 기본 함수 (input(), print()) sys 함수 (sys.stdin.readline(), sys.stdout.write())
| 속도 | 느림 (내부 처리 多) | 빠름 (버퍼에서 바로 처리) |
| 개행 처리 | 자동 제거 (input) / 자동 추가 (print) | 개행 포함 (readline), 수동 추가 (write) |
| 사용 용도 | 일반적인 입력/출력 처리 | 대규모 입력/출력 최적화 필요 시 |
| 메모리 효율성 | 적당함 | 대량 데이터 시 더 효율적 |
🔥 속도 실험 (입력 속도 비교)
import sys
from time import time
n = 100000
# input() 테스트
start = time()
for _ in range(n):
x = input()
end = time()
print("input() 시간:", end - start)
# sys.stdin.readline() 테스트
start = time()
for _ in range(n):
x = sys.stdin.readline()
end = time()
print("sys.stdin.readline() 시간:", end - start)
📌 결과: sys.stdin.readline()이 수 배 빠름
🎯 최종 요약 (코딩테스트에서 꼭 알아야 할 sys 함수)
함수 설명 주요 사용 사례
| sys.stdin.readline() | 빠른 입력 처리 (input() 대체) | 대량 입력 처리, 반복 입력 |
| sys.stdout.write() | 빠른 출력 처리 (print() 대체) | 대량 출력 처리, 성능 최적화 |
| sys.exit() | 프로그램 즉시 종료 | 조건 미충족 시 빠른 종료, 불필요한 연산 방지 |
| sys.setrecursionlimit() | 재귀 깊이 설정 | 깊은 DFS, 백트래킹 문제 |
| sys.maxsize | 최대 정수값 반환 (무한대 대체) | 최단 경로 초기화 (INF) 사용 시 |
| sys.argv | 명령행 인자 전달 | 특수한 실행 환경에서 명령행 인자 처리 |
💡 코딩테스트 실전 팁
1️⃣ 대량 입력: sys.stdin.readline() 사용
2️⃣ 대량 출력: sys.stdout.write()와 "\n".join() 병행
3️⃣ 조건 충족 시 빠른 종료: sys.exit()
4️⃣ 재귀 문제: sys.setrecursionlimit() 필수
5️⃣ 무한대 대체값: sys.maxsize 사용
🚀 결론
- 💡 sys 모듈은 코딩테스트 최적화를 위한 필수 도구
- ⚡ 빠른 입출력, 메모리 효율성, 깊은 재귀 처리 모두 지원
- 🎯 정확한 사용 시기와 용법을 파악하고 실전에서 능숙하게 활용하여 시간 초과 없는 최적 코드 작성! 🔥✨
'알고리즘, 코딩테스트' 카테고리의 다른 글
| 백준 10845번: 큐 (Python) (0) | 2025.02.21 |
|---|---|
| 백준 1406번: 에디터 (Python) (0) | 2025.02.20 |
| 백준 1874번: 스택 수열 (Python) (0) | 2025.02.19 |
| 백준 9012번: 괄호 (Python) (1) | 2025.02.18 |
| 백준 9093번: 단어 뒤집기 (Python) (0) | 2025.02.18 |