본문 바로가기

Python

파이썬 알고리즘 관련 시간을 줄이는 팁들

자고로 시간을 줄이는 것은 언제나 알고리즘에 있어 지향해야할 목표점이다. 아직 알고리즘 초보라 편법처럼이라도 시간을 줄이고픈 마음에 팁들이 생길 때마다 추가하려고 한다.

 

1. 입력 - sys 모듈의 readline() 메서드 사용

보통 입력을 받을 때 input() 메서드를 사용하지만, sys 모듈의 readline()을 사용하면 더 빠른 시간에 입력을 받을 수 있으며, 데이터가 많아질 수록 이 차이는 더 커진다.

 

2. 리스트 반복하기 - 곱셈 연산자 사용

파이썬의 기능 중 리스트를 반복할 때 곱셈을 사용할 수 있다는 장점이 있다. 똑같은 데이터를 반복적으로 리스트에 넣고 싶을 때, for 과 in range(n)을 사용할 수도 있지만, 곱셈 연산자를 사용하는 것이 더 빠르다.

 

예) 1억개의 0 넣기

import time

times = 100000000

start = time.time()

# for 과 in, range
i = [0 for _ in range(times)]
mid1 = time.time()
print(mid1-start)

# 곱셈 연산자
i = [0] * times
mid2 = time.time()
print(mid2-mid1)

 

출력

 

6.190709590911865
0.6791272163391113

 

곱셈 연산자가 약 10배 빠른 것을 볼 수 있다.

 

그러나 여러 리스트를 만들 때에는 range 함수를 쓰도록 한다. 이는 리스트를 곱셈으로 만들 때에는 같은 참조를 하는 리스트 객체를 여러 개 만들기 때문에, 각 리스트가 다른 값을 담도록 하게 하고 싶을 때 한 리스트를 바꾸면 다른 모든 곱셈으로 만들어진 리스트들이 바뀌어지게 될 것이다.

 

큐와 우선순위 큐 - 모듈 사용

큐를 구현할 때는 collections 모듈의 deque를 사용하고, 우선순위 큐를 구현할 때는 heapq를 사용하도록 한다.