HanSol's Oak Cask

코딩테스트를 위한 sys 모듈 (파이썬) 본문

알고리즘, 코딩테스트

코딩테스트를 위한 sys 모듈 (파이썬)

HanSol_Lim 2025. 2. 19. 13:12

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 모듈은 코딩테스트 최적화를 위한 필수 도구
  • 빠른 입출력, 메모리 효율성, 깊은 재귀 처리 모두 지원
  • 🎯 정확한 사용 시기와 용법을 파악하고 실전에서 능숙하게 활용하여 시간 초과 없는 최적 코드 작성! 🔥✨