코딩테스트를 공부하다보면 시간복잡도를 계산하면서 푸는 멋쟁이 분들을 볼 수 있다.
난 아직 멋쟁이가 아니다... 시간 복잡도 마스터하기 위해 오늘은 이 포스트를 쓴다!
우선 알고리즘이 빠르다 는건 시간 초 기준으로 결정되는 것이 아님!
왜냐하면 컴퓨터 하드웨어 성능에 따라 같은 알고리즘이여도 시간 초가 다르기 때문이지~
따라서 알고리즘 속도는 "완료까지 걸리는 절차의 step 수"
로 결정된다.
N이 얼마나 크든지 상관없이 동일한 숫자의 스텝이 필요함 ➡️ O(1)
# 무조건 배열의 첫번째 원소만 출력!
def print_first(arr):
print(arr[0])
요소 하나씩 검사하는 알고리즘
input size에 따른 시간 복잡도를 가진다. ➡️ O(N)
for a in arr:
print(a)
for a in arr:
print(a)
for a in arr:
print(a)
n번의 루프 안에서 n번의 루프를 실행한다. ➡️ O(N^2)
# n이 10이라면, 10*10의 100번의 step이 필요
for a in arr:
for b in arr:
print(a, b)
n = log 32 → (밑은 2라고 가정)
2^5 = 32 이므로 n은 5 = (5 step)
선형 검색이라면 32 step이지만, 이진 검색(로그 시간)이라면 5 step