베지밀

[Python] 백준 10818 - input()과 sys.stdin.readline()의 차이 본문

개인 공부/코딩테스트

[Python] 백준 10818 - input()과 sys.stdin.readline()의 차이

vegimil 2024. 8. 17. 16:39

문제는 다음과 같다.

 

 

나는 다음 두 가지 방법으로 풀었다.

1. sort()로 정렬해서 첫번째와 마지막 인덱스를 찾는 방법

2. min(), max() 함수를 이용하는 방법

 

#10818
#sort()

N = int(input())
num_list = list(map(int, input().split()))

num_list.sort()
print(num_list[0], end=' ')
print(num_list[N-1])
#10818
#min(), max()

N = int(input())
num_list = list(map(int, input().split()))

print(min(num_list), end=' ')
print(max(num_list))

참고로 print(min(num_list), max(num_list))가 더 간결..

 

 

다른 사람들의 풀이를 보며, sys를 import해서 sys.stdin.readline()으로 푸는 게 메모리와 실행 시간 측면에서 아주 조금 더 효율적이라는 것을 발견했다.

 

 

sys.stdin.readline()이 input()보다 메모리와 시간 측면에서 더 효율적인 이유

1. 문자열 처리 방식

input은 입력된 데이터를 문자열로 변환하고, 줄 바꿈을 제거하는 등의 추가 처리를 한다.

sys.stdin.readline()은 입력을 그대로 반환하고 필요에 따라 형변환을 할 수 있기 때문에 불필요한 메모리 사용과 실행 시간을 줄일 수 있다.

 

2. 버퍼 처리 방식

input()은 사용자가 키를 누를 때마다 데이터를 버퍼에 저장하고, sys.stdin.readline()은 한 번에 읽어와 버퍼에 저장하기 때문에 빠르다.

또한 sys.stdin.readline()은 입력 크기에 제한을 둘 수 있어, 대용량 입력 처리 시 메모리 사용을 최적화할 수 있다.

 

 

 

결론

대량 입력 및 알고리즘 문제 해결에서는 sys.stdin.readline()을 사용하는 것이 효율적이다.

그러나 프롬프트를 사용하거나, 소규모 입력에서는 input()이 더 적합할 수 있다.