백준 등수 매기기 문제를 풀다가 아래와 같이 효율성 문제 때문에 골치 아픈 일이 생겼다.
내가 작성한 코드는 아래와 같다
total = int(input())
arr_expect = []
answer = 0
for _ in range(total):
arr_expect.append(int(input()))
arr_expect.sort()
for i in range(total):
answer += abs(arr_expect[i]-(i+1))
print(answer)
간단한 문제이기에 sort()함수를 사용하여 불만도의 합을 최소로 하는 코드를 짠 거 같았는데 효율성에서 통과하지 못하였다.
문제는 input() 함수에 있었다. input 대신 sys모듈을 사용하였더니 통과할 수 있었다.
import sys
total = int(sys.stdin.readline())
arr_expect = []
answer = 0
for i in range(total):
arr_expect.append(int(sys.stdin.readline()))
arr_expect.sort()
for i in range(total):
answer += abs(arr_expect[i]-(i+1))
print(answer)
위의 문제 같이 대량의 데이터를 반복적으로 입력받을 때 input()을 이용하지 않고, sys.stdin.readline()을 이용하면 성능이 향상 된다