배달 음식 주문을 생각해 보자.
즉, 알고리즘마다 같은 문제를 해결해도 처리 속도가 다른걸 알 수 있다!
이를 수학적으로 표현한 것이 시간복잡도(Big-O 표기법)
빅오(Big-O) 표기법은 최악의 경우(가장 느린 경우)의 실행 시간을 표현합니다.

def get_first_element(arr):
return arr[0] # 배열의 첫 번째 원소 접근 (항상 1번 실행)
✔ 특징: 배열의 크기 N이 커져도 실행 시간은 변하지 않음.
def print_all_elements(arr):
for element in arr:
print(element) # 배열의 크기만큼 실행 (N번 반복)
✔ 특징: 배열이 커질수록 실행 시간도 증가.
def print_pairs(arr):
for i in range(len(arr)):
for j in range(len(arr)): # 중첩 루프
print(arr[i], arr[j])
✔ 특징: N = 1000이면 1000 × 1000 = 1,000,000번 실행됨.
✔ 문제: N이 커지면 너무 느려짐 → 최적화 필요.
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
✔ 특징: 매번 탐색 범위가 절반으로 줄어들어 O(log N)의 성능.
✔ 예제: N = 1,000,000이면 log(1,000,000) ≈ 20번만에 찾음.
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2) # 2개의 재귀 호출 발생
✔ 특징: N이 조금만 커져도 실행 시간이 엄청 증가.
✔ 예제: N = 50이면 거의 10^15번 연산 → 실제 실행 불가능!

🔹 결론
✔ O(N log N) 이하의 알고리즘을 사용하는 것이 가장 좋음
✔ O(N²) 이상이면 N이 커질수록 실행 시간이 급격히 증가 → 최적화 필수
✔ O(2^N), O(N!) 알고리즘은 현실적으로 사용 불가능
.
.
.
.
- 알고리즘 문제 풀이: N ≤ 10^6일 경우 O(N log N) 이하면 통과 가능.
- 웹 개발: 데이터베이스 검색 시 O(N²)보다 O(log N)이 훨씬 빠름.
- AI & 머신러닝: 모델 훈련 시 O(N log N) 이하의 최적화 필수.
다음과 같이 대부분 모든 영역에서 시간복잡도를 활용한다. 시간복잡도를 잘 활용하면 더 성능 좋은 서비스를 개발할 수 있지 않을까?
.
.
.
.

✔ 시간복잡도가 작은 알고리즘을 선택해야 실행 속도가 빠름!
✔ 입력 크기에 따라 알고리즘을 선택하는 것이 중요!
.
.
.
이 글을 읽고 시간복잡도에 대해 어느정도 감이 잡혔길 바란다 !