-
Notifications
You must be signed in to change notification settings - Fork 6
시간복잡도
Baek HyeonBin edited this page Mar 11, 2026
·
1 revision
시간복잡도(Time Complexity)는 알고리즘이 실행되는 데 걸리는 시간을 입력 크기 N에 대해 표현한 것인데 코딩 테스트에서는 실제 실행 시간이 아니라 입력 크기가 증가할 때 연산 횟수가 얼마나 증가하는지를 기준으로 알고리즘의 효율성을 판단합니다.
| 복잡도 | 의미 | 예시 |
|---|---|---|
| 상수 시간 | 배열 인덱스 접근 | |
| 로그 시간 | 이진 탐색 | |
| 선형 시간 | 배열 순회 | |
| 로그 선형 | 정렬 | |
| 이중 반복문 | 브루트포스 | |
| 지수 시간 | 부분집합 탐색 |
배열의 특정 인덱스에 접근하는 연산은 입력 크기와 관계없이 항상 동일한 시간이 걸립니다.
int value = arr[5];value = arr[5]let value = arr[5];이진 탐색은 탐색 범위를 절반씩 줄여가며 탐색합니다.
while(left <= right){
int mid = (left + right) / 2;
if(arr[mid] == target) break;
else if(arr[mid] < target) left = mid + 1;
else right = mid - 1;
}while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
break
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1while(left <= right){
let mid = Math.floor((left + right) / 2);
if(arr[mid] === target) break;
else if(arr[mid] < target) left = mid + 1;
else right = mid - 1;
}배열을 처음부터 끝까지 한 번 순회하는 경우입니다.
for(int i = 0; i < n; i++){
System.out.println(arr[i]);
}for i in range(n):
print(arr[i])for(let i = 0; i < n; i++){
console.log(arr[i]);
}대표적으로 정렬 알고리즘이 있습니다.
Arrays.sort(arr);arr.sort()arr.sort((a,b) => a - b);이중 반복문이 있는 경우입니다.
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
System.out.println(i + " " + j);
}
}for i in range(n):
for j in range(n):
print(i, j)for(let i = 0; i < n; i++){
for(let j = 0; j < n; j++){
console.log(i, j);
}
}모든 부분집합을 탐색하는 경우입니다.
void dfs(int depth){
if(depth == n) return;
dfs(depth + 1);
dfs(depth + 1);
}def dfs(depth):
if depth == n:
return
dfs(depth + 1)
dfs(depth + 1)function dfs(depth){
if(depth === n) return;
dfs(depth + 1);
dfs(depth + 1);
}Input Size & Algorithm Complexity
5주차 - Two Pointers / Sliding Window
13주차 - Simulation / Implementation
백현빈 → 강민주 → 조수빈 → 임현빈 → 전병훈 → 이건희
(이후 동일한 순서로 반복)