컴퓨터 공부/🧮 알고리즘

시간과 메모리 측정

letzgorats 2021. 7. 6. 19:55

코딩 테스트 문제를 풀 때, 시간과 메모리를 측정하는 방법을 알아보자!

 

파이썬에서는 프로그램 수행 시간과 메모리 사용량을 측정할 수 있다.

문제를 풀면서, 자신이 제대로 알고리즘을 작성하고 있는지 알아야 하기 때문이다. 몇몇 기업은 코딩 테스트를 볼 때, 제출 횟수를 제한 하기 때문에 시간과 메모리를 중간에 체크하는 법을 알면 문제를 옳은 알고리즘으로 풀었는지 미리 알 수 있을 것이다.

 

아래는 특정한 프로그램의 수행 시간을 측정하는 소스코이다.

import time

start_time = time.time()    # 측정 시작

# 프로그램 소스코드 ~~~~

end_time = time.time()    # 측정 종료

print("time : ", end_time - start_time)  # 수행시간 출력

 

예를 들어, '선택 정렬'과 '파이썬의 기본 정렬 라이브러리'의 속도를 비교할 때는 아래와 같이 소스코드를 작성할 수 있다.

선택 정렬을 사용할 때, 최악의 경우 시간 복잡도가 O(N²)이며, 파이썬의 기본정렬 라이브러리의 최악의 경우 시간 복잡도는 O(NlogN) 을 보장하여 상대적으로 빠르다.

from random import randint
import time

# 배열이 10000개의 정수를 삽입
array = []
for _ in range(10000):
    array.append(randint(1, 100))  # 1부터 100 사이의 랜덤한 정수

# 선택 정렬 프로그램 성능 측정
start_time = time.time()

# 선택 정렬 프로그램 소스코드
for i in range(len(array)):
    min_index = i  # 가장 작은 원소의 인덱스
    for j in range(i+1, len(array)):
        if array[min_index] > array[j]:
            min_index = j
    array[i], array[min_index] = array[min_index], array[i]  # swap

end_time = time.time()  # 측정 종료
print("선택 정렬 성능 측정: ", end_time - start_time)  # 수행시간 출력

# 배열을 다시 무작위 데이터로 초기화
array = []
for _ in range(10000):
    array.append(randint(1, 100))  # 1부터 100 사이의 랜덤한 정수

# 기본 정렬 프로그램 성능 측정
start_time = time.time()

# 기본 정렬 라이브러리 사용
array.sort()

end_time = time.time()  # 측정 종료
print("기본 정렬 라이브러리 성능 측정 : ", end_time-start_time)  # 수행시간 출력

성능 비교

선택 정렬은 꽤나 시간이 걸렸고, 기본 정렬 라이브러리를 사용했을 때는 1초도 채 걸리지 않을 만큼 짧은 시간이 걸렸다. 이렇듯, 라이브러리를 제대로 활용하는 능력도 많이 알고리즘 문제를 풀어봄으로써 실력을 키워야 한다.

반응형