input() vs sys.stdin.readline()

HyeonWoo·2021년 1월 1일
0

파이썬

목록 보기
1/2
post-thumbnail

백준 등수 매기기 문제를 풀다가 아래와 같이 효율성 문제 때문에 골치 아픈 일이 생겼다.

내가 작성한 코드는 아래와 같다

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()을 이용하면 성능이 향상 된다

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글