| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 그리디
- 프론트엔드
- DFS
- 그래프
- CSS
- 코딩
- Mini-React
- 코딩테스트
- BFS
- 개발자
- 혼자 공부해서 개발까지
- 프론트앤드
- Python
- 알고리즘
- HTML기초
- html
- 해시
- c언어
- 크래프톤 정글
- js
- react
- javascript
- 팀프로젝트
- 알고리즘 기초
- 백준
- 정렬
- frontend
- 정글
- 프로그래머스
- Git
Archives
- Today
- Total
민혁이의 IT스토리
알고리즘 기초 - 시간복잡도 본문
시간복잡도?
정의 :
시간복잡도(Time Complexity)란, 어떤 알고리즘이 실행될 때 걸리는 연산 횟수를 입력의 크기 nn에 따라 표현한 것을 말한다. 이는 실제 실행 시간을 직접 측정하는 것이 아니라, 알고리즘의 성능을 수학적으로 예측하고 비교하기 위한 도구이다.
보통 빅오(Big-O) 표기법을 사용해서 나타낸다.
왜 중요할까?
알고리즘 문제를 풀 때 단순히 정답이 맞는 것만으로는 부족할 때가 있다.
예를 들어, 입력이 10개일 때는 1초도 안 걸리지만, 입력이 100만 개라면 같은 알고리즘이라도 몇 분이 걸릴 수도 있다.
이때, “내가 작성한 코드가 입력이 커졌을 때도 빠르게 동작할까?”를 판단하는 기준이 바로 시간복잡도다.
빅오 표기법
알고리즘의 실행 시간을 입력 크기 n이 무한히 커질 때의 성장률로 표현한다.
| 표기법 | 이름 | 예시 | 설명 |
| O(1) | 상수 시간 | 해시 테이블 조회 | 입력 크기와 상관없이 항상 일정한 시간 소요 |
| O(logn) | 로그 시간 | 이분 탐색 | 입력 크기가 커져도 조금씩만 증가 |
| O(n) | 선형 시간 | 배열 전체 탐색 | 입력 크기에 비례해서 실행 시간 증가 |
| O(n log n) | 로그 선형 시간 | 퀵 정렬, 머지 정렬 | 효율적인 정렬 알고리즘 |
| O(n**2) | 제곱 시간 | 버블 정렬 | 중첩 반복문에서 자주 발생 |
| O(2**n) | 지수 시간 | 부분집합 탐색 | 입력 크기 조금만 커져도 매우 느려짐 |
| O(n!) | 팩토리얼 시간 | 순열 탐색 | 가장 느린 경우, 현실적으로 불가능 |

입력 크기 nn이 커질 때 빠른 순서대로 정리하면:
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(2n) < O(n!)
O(n) 예시
# O(n) 예시
arr = [1, 2, 3, 4, 5]
for x in arr:
print(x) # n번 실행됨
O(n**2) 예시
# O(n^2) 예시
arr = [1, 2, 3, 4, 5]
for i in arr:
for j in arr:
print(i, j) # n * n번 실행됨
마무리
시간복잡도는 단순히 “수학”이 아니라, 코드를 효율적으로 작성하기 위한 필수 도구다.
앞으로 알고리즘을 공부하면서 문제를 풀 때마다 “내 풀이의 시간복잡도는 얼마일까?”를 습관처럼 따져본다면, 점점 더 좋은 코드를 작성할 수 있을 것이다
'알고리즘' 카테고리의 다른 글
| 알고리즘 기초 - Linked List (0) | 2025.09.22 |
|---|---|
| 알고리즘 기초 - 큐 (0) | 2025.09.18 |
| 알고리즘 기초 - 스택 (0) | 2025.09.18 |
| 알고리즘 기초 - 이분탐색 (0) | 2025.09.18 |
| 알고리즘 기초 - 정렬 (0) | 2025.09.17 |