[코딩 테스트] 코드업 예제로 알아보는 Python 입력모듈과 경과시간
파이썬으로 코딩테스트를 준비할 때 입력은
별도로 import 필요 없는 내장함수 input()이나
import sys를 통해 stdin.readline()을 이용할 수 있다.
눈으로 보기에는 input() 보다 stdin.readline() 더 길고 import 도 하기 때문에 입력시간이 더 길 것 같다.
과연 그럴지 한번 확인해보자.
'''
https://codeup.kr/problem.php?id=1409
1409 : 기억력 테스트 1
input
10 9 8 7 6 5 4 3 2 1
3
'''
import sys
import time
start1 = time.time()
arr = list(map(int, input().split()))
k = int(input())
print(arr[k-1])
end1 = time.time()
start2= time.time()
arr = list(map(int, sys.stdin.readline().split()))
k = int(sys.stdin.readline())
print(arr[k-1])
end2 = time.time()
notice = f'''
time1: {end1- start1}
time2: {end2 - start2}
'''
print(notice)
time1은 input() 쓴 경우와 time2는 sys.stdin.readline() 쓴 경우이다.
경과 시간을 확인하면 다음과 같다.
결론
input()보다 sys.stdin.readline()이 코드 실행시간이 더 빠르다.
그런데 시간 빠른 것보다 간단하게 쓰는 게 더 중요하다고 생각하면 input()을 써도 무방하다.
자기가 원하는 도구를 고르는 것일 뿐.
반전
코드업에서 실행시간을 확인해보면 예상과 반대이다.
왜 그런지 확인해보니 다음과 같다. 참고!
요약
일반적으로 sys.stdin.readline()이 input()보다 실행속도가 빠르지만 실행환경에 따라 입력값을 처리해놓은 상황이 다르기 때문에 다소 다를 수 있음.
GPT 설명
코딩 테스트 플랫폼과 IDE에서 실행할 때 input()과 sys.stdin.readline()의 성능 비교 결과가 반대로 나오는 이유는 실행 환경의 차이 때문일 가능성이 큽니다. 이를 자세히 분석해볼게요.
1. 일반적인 속도 차이
- input()은 내부적으로 여러 가지 처리를 거쳐 입력을 받기 때문에 느립니다.
- sys.stdin.readline()은 버퍼를 사용하여 한 번에 데이터를 읽어오기 때문에 더 빠릅니다.
IDE에서 실행했을 때:
- sys.stdin.readline()이 더 빠르게 측정됨 → 일반적으로 예상되는 결과.
코딩 테스트 플랫폼에서 실행했을 때:
- input()이 더 빠르게 측정됨 → 예상과 다른 결과.
2. 실행 환경 차이의 영향
(1) 코딩 테스트 플랫폼은 입력이 미리 주어져 있을 가능성이 있음
- 대부분의 코딩 테스트 플랫폼에서는 미리 준비된 입력을 빠르게 처리할 수 있도록 최적화되어 있을 수 있음.
- 이 경우 input()이 내부적으로 최적화되어 실행될 수도 있음.
(2) 입력 버퍼 크기의 차이
- sys.stdin.readline()은 내부적으로 버퍼를 사용하지만, 실행 환경마다 버퍼 크기가 다를 수 있음.
- 특정 환경에서는 sys.stdin.readline()이 예상보다 느릴 수도 있음.
(3) 입출력 리디렉션 여부
- 코딩 테스트 플랫폼에서는 표준 입력이 파일로 리디렉션되어 있을 가능성이 있음.
- sys.stdin.readline()이 파일에서 읽어올 때 오버헤드가 발생할 수 있음.
(4) 파이썬 구현 차이 (CPython, PyPy 등)
- 플랫폼에서 어떤 파이썬 구현을 사용하는지에 따라 input()과 sys.stdin.readline()의 내부 동작이 다를 수 있음.
3. 결론
- 보통 sys.stdin.readline()이 더 빠른 것이 일반적이지만, 코딩 테스트 플랫폼에서는 환경에 따라 input()이 더 빠르게 동작할 수도 있음.
- 실행 환경이 서로 다르므로 단순 비교는 어렵고, 플랫폼에서 어떻게 동작하는지 실험해보는 것이 중요함.