공부일지

[코딩 테스트]입력방식 비교 - sys.stdin.readline() v.s. open(0).read().splitlines() 본문

Computer/공부정리

[코딩 테스트]입력방식 비교 - sys.stdin.readline() v.s. open(0).read().splitlines()

이르리의 공부일지 2025. 4. 25. 14:06

배경

 문제 푸는데 sys 이용한 입력이 open()이용한 입력보다 더 빨라서 의문이었다.

왜냐하면 코테 고수들은 open을 주로 쓰길래 그리고 open이 빠르다고 해서

입력을 여러 줄 받을 때는 만능 방식이라고 생각했다.

 

 python에서 입력하는 방법은 여러가지인데

그 중에 내장모듈 sys 를 이용한 방법과 내장함수 open()을 이용한 방법이 있다.

둘 다 많이 쓰이는 방법이다.

무엇이 어떤 상황에서 더 나은지 알아보자.

 


내장모듈 sys 이용한 입력

import sys
input = sys.stdin.readline

n = int(input())
nums = [int(input()) for _ in range(n)]

 

  • 한 줄씩 바로바로 처리
  • 버퍼가 존재하고 입력 스트림이 연결된 상태에서 직접 읽음
  • 지연 없이 라인 단위로 처리
  • sys.stdin은 C언어 레벨에서 최적화된 fgets() 비슷한 처리 방식

 

내장함수 open()을 이용한 입력

 

lines = open(0).read().splitlines()
n = int(lines[0])
nums = list(map(int, lines[1:]))

 

  • 전체 입력을 한 번에 다 읽고
  • splitlines()로 한 줄씩 나눔
  • 내부적으로 문자열 처리 과정이 많이 포함됨
  • splitlines()는 줄 끝 문자 제거, 줄 나누기 등을

-> 추가로 수행입력이 아주 많을 경우 오히려 느림
-> 특히 list(map(...)) 부분에서 한꺼번에 메모리 할당하느라 시간 더 걸릴 수 있음

 

c.f.

open(0): 입력

open(1): 출력

 


open 방식이 효율적인 경우

1. 입력을 "한 번에 다 읽고", 여러 번 순회하거나 후처리할 때

lines = open(0).read().splitlines()
for line in lines:
    ...
# 또 다른 for문에서 lines 재사용

 

 

2. 정규표현식, 문자열 전처리를 한꺼번에 적용할 때

import re
data = open(0).read()
matches = re.findall(r'\d+', data)

 

3. 테스트 입력을 복사/붙여넣기 할 때

 

  • 파일 입력을 스크립트 내에서 테스트하려는 경우
  • sys.stdin보다 open('input.txt').read()가 더 직관적이고 짧음

 

4. 매우 작고 고정된 입력일 때

 

  • 입력 줄 수가 적고, 라인마다 처리 부담이 없다면
  • 한 번에 읽는 방식이 효율성 손실 없이 코드 간결성 확보 가능

 

 

물론 open()도 메소드 read() - splitlines(), 메소드 readlines() 등 쓰는 법은 다양하다.

그 중 여러 줄 입력에 가장 적합한게
read().splitlines()(결과: 스트링 요소를 원소로 하는 리스트)라고 생각했는데

문제에 따라서, 풀이 방식에 따라서 효율적인 방식이 다르다는 걸 알게 됐다.

 


결론

여러 줄 입력받아서 메모리에 넣어두고 계속 쓰는 게 아니라면, 

코테에서는 웬만하면 sys.stdin.readline 쓰는 게 적당!

 

 

 

참고링크

Python 내장함수 - open()

https://docs.python.org/ko/3.13/library/functions.html

 

Built-in Functions

The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-in Functions,,, A, abs(), aiter(), all(), a...

docs.python.org