알고리즘의 성능을 나타내는 척도
복잡도가 낮을수로 좋으며, 코드의 가독성과는 구분되는 개념
특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석
빅오 표기법
- 시간 복잡도를 표현하는 표기 방법
- 가장 빠르게 증가하는 항만을 고려하는 표기법(함수의 상한만을 나타냄)
- 연산 횟수를 식으로 나타냈을 때, O(가장 빠르게 증가하는 항)
ex) 연산 횟수가 3n3 + 5n2 + 10000000 인 알고리즘의 시간 복잡도를 빅오 표기법으로 나타내면 O(N3)
시간 복잡도를 고려한 알고리즘 설계 Tip
- 일반적인 컴퓨터에서 연산 횟수가 5억을 넘을 경우 C언어는 1~3초, 파이썬은 5~15초 정도가 소요(PyPy는 일반적으로 좀 더 빠름)
- 코딩 테스트는 일반적으로 1~5초의 시간제한을 명시해 두며, 문제에 명시되지 않은 경우에는 대략 5초 정도의 제한이 있음
- 문제를 풀기 전 시간제한(수행시간 요구사항)을 먼저 확인 후 어느 정도의 시간이 걸리는(시간 복잡도를 가진) 알고리즘으로 문제를 풀지 설계해야 함
- 일반적으로 문제에서는 자료(데이터)의 갯수가 몇 개인지 문제나 문제 조건에 명시해 줌 -> 이를 고려해서 시간 복잡도를 계산할 수 있음
코드 소요 시간 측정 예시
import time
start_time = time.time()
# ... 소스코드 ...
end_time = time.time()
print('time : ', end_time - start_time)
특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석
하나의 문제가 하나의 유형에 대응되는 것이 아니라, 하나의 문제가 여러 유형에 속하는 경우가 많음
자신의 알고리즘 코드 모아서 깃허브에 노트해두는 것 추천 - 자주 사용하는 코드 위주로(공식, cheat sheet)
기업에서 시행했던 코딩테스트들의 역대 커트라인 참고(몇 문제 중 몇 개)
덕분에 좋은 정보 얻어갑니다, 감사합니다.