시간복잡도 최종 수정일 2026-06-23 00:32 조회수 1
대시보드

시간복잡도

기본 정보


개요

시간 복잡도(Time Complexity)는 입력 데이터의 크기(N)가 증가할 때 알고리즘의 실행 시간이 얼마나 증가하는지를 나타내는 척도이다.

실제 실행 시간을 측정하는 것이 아니라, 연산 횟수가 얼마나 증가하는지를 수학적으로 표현한다.

예를 들어 데이터가 10개일 때 1초가 걸리고, 100개일 때 100초가 걸린다면 효율이 좋지 않은 알고리즘일 가능성이 높다.


왜 중요한가?

데이터가 적을 때는 차이가 크지 않지만, 데이터가 많아질수록 성능 차이가 매우 커진다.

예시

N = 1,000,000

O(N)     → 약 1,000,000회

O(N²)    → 약 1,000,000,000,000회

같은 데이터를 처리해도 연산량 차이가 엄청나게 발생한다.


Big-O 표기법

시간 복잡도는 일반적으로 Big-O 표기법을 사용한다.

O(1)

O(log N)

O(N)

O(N log N)

O(N²)

O(2^N)

O(N!)

O(1) - 상수 시간

입력 크기와 상관없이 항상 같은 시간이 걸린다.

const arr = [1,2,3,4,5];

console.log(arr[0]);

배열 첫 번째 요소 접근

N=10

N=1,000,000

모두 동일

가장 이상적인 성능이다.


O(log N) - 로그 시간

데이터를 절반씩 줄여가며 탐색한다.

대표 예시

  • 이진 탐색(Binary Search)
100개

↓

50개

↓

25개

↓

12개

↓

6개

O(N) - 선형 시간

데이터 개수만큼 반복한다.

for(let i=0; i<n; i++){

}

예시

N=10

→ 10번

N=100

→ 100번

O(N log N)

정렬 알고리즘에서 자주 등장한다.

대표 예시

  • Merge Sort
  • Quick Sort(평균)
  • Heap Sort
1,000개 데이터

↓

약 10,000회 연산

O(N²)

이중 반복문

for(let i=0;i<n;i++){

    for(let j=0;j<n;j++){

    }

}

예시

N=100

↓

10,000회

데이터가 커질수록 급격히 느려진다.


O(2^N)

모든 경우를 탐색하는 경우

예시

  • 완전 탐색
  • 백트래킹 일부
N=20

↓

1,048,576

O(N!)

순열(Permutation)

5!

=

120

10!

=

3,628,800

매우 비효율적이다.


시간 복잡도 비교

좋음

O(1)

↓

O(log N)

↓

O(N)

↓

O(N log N)

↓

O(N²)

↓

O(2^N)

↓

O(N!)

나쁨

배열(Array)

작업시간 복잡도
접근O(1)
검색O(N)
추가(끝)O(1)
삭제(끝)O(1)
추가(중간)O(N)
삭제(중간)O(N)

연결 리스트(Linked List)

| 작업 | 시간 복잡도 |

| -- | ------ |

| 접근 | O(N) |

| 검색 | O(N) |

| 삽입 | O(1) |

| 삭제 | O(1) |


해시 테이블(Hash Table)

| 작업 | 시간 복잡도 |

| -- | ------ |

| 검색 | O(1) |

| 삽입 | O(1) |

| 삭제 | O(1) |

평균 기준이다.


대표 정렬 알고리즘

알고리즘시간 복잡도
Bubble SortO(N²)
Selection SortO(N²)
Insertion SortO(N²)
Merge SortO(N log N)
Quick SortO(N log N) 평균
Heap SortO(N log N)

예제 비교

비효율적

for(let i=0;i<n;i++){

    for(let j=0;j<n;j++){

    }

}
O(N²)

개선

for(let i=0;i<n;i++){

}
O(N)

실무에서 중요한가?

웹 개발에서는 직접 알고리즘을 작성하는 경우보다

  • 대량 데이터 처리
  • 검색 기능
  • 통계 기능
  • 로그 분석
  • AI 데이터 처리

에서 중요성이 커진다.

예를 들어 회원 100명일 때는 문제가 없지만,

100명

↓

10만명

↓

100만명

으로 증가하면 성능 차이가 크게 발생한다.


실무 메모

실무에서는 다음과 같은 방식이 권장된다.

  • 중첩 반복문 최소화
  • HashMap 적극 활용
  • DB 인덱스 활용
  • 정렬은 내장 함수 우선 사용
  • 검색은 Binary Search 고려
  • 캐싱(Cache) 활용
  • 불필요한 반복 제거
  • Big-O를 기준으로 설계 검토
  • 성능 측정은 실제 데이터로 진행
  • 공간 복잡도와 함께 고려

시간 복잡도와 함께 사용하는 기술


대표 면접 질문

  • O(1)과 O(N)의 차이는?
  • HashMap 검색 속도는?
  • Quick Sort 평균 시간 복잡도는?
  • Binary Search 조건은?
  • Array와 Linked List 차이는?
  • N² 알고리즘을 개선하는 방법은?

관련 문서


출처

  • Algorithm Analysis 이론
  • CLRS (Introduction to Algorithms)
  • GeeksForGeeks