출처 : 이것이 코딩 테스트다 도서 Chapter 01
- 시간 복잡도 : 알고리즘을 위해 필요한 연산의 횟수
- 공간 복잡도 : 알고리즘을 위해 필요한 메모리의 양
시간 복잡도
빅오 표기법을 사용
* 빅오 표기법 : 가장 빠르게 증가하는 항만을 고려하는 표기법
빅오 표기법 | 명칭 |
O($1$) | 상수 시간(Constant time) |
O($logN$) | 로그 시간(Log time) |
O($N$) | 선형 시간 |
O($NlongN$) | 로그 선형 시간 |
O($N^2$) | 이차 시간 |
O($N^3$) | 삼차 시간 |
O($2^n$) | 지수 시간 |
N이 1,000일 때의 연산 횟수 | |
O($N$) | 1,000 |
O($NlongN$) | 10,000 |
O($N^2$) | 1,000,000 |
O($N^3$) | 1,000,000,000 |
시간 제한이 1초인 문제에 대한 예시
N의 범위가 아래와 같을 때 시간 복잡도를 아래와 같이 설계하면 문제를 풀 수 있다.
N의 범위 | 시간 복잡도 |
500 | O($N^3$) |
2,000 | O($N^2$) |
100,000 | O($NlongN$) |
10,000,000 | O($N$) |
공간 복잡도
빅오 표기법을 사용
* 자료형 int 배열의 예시 (int 크기 : 4바이트)
int a[1000] | 4KB |
int a[1000000] | 4MB |
int a[2000][2000] | 16MB |
코딩 테스트에서는 보통 메모리 사용량을 128 ~ 512MB 정도로 제한한다.
👉 데이터의 개수가 1,000만 단위가 넘어가지 않도록 알고리즘을 설계해야한다.
시간 측정
수행 시간 측정 소스 코드
long beforeTime = System.currentTimeMillis(); //측정 시작
// 프로그램 소스 코드
long afterTime = System.currentTimeMillis(); // 측정 종료
System.out.println("time(m) : "+(afterTime - beforeTime)/1000); // 수행 시간 출력
덧붙임
- 1초에 연산 횟수가 1억이라고 생각한다.
- 메모리 사용량 = 배열의 크기 * 해당 자료형의 크기
로 생각하며, 지역 변수, 함수 등을 생각해서 5~10MB정도는 여유로 빼고 생각한다.
반응형
'자료구조&알고리즘 > Basic' 카테고리의 다른 글
부분 집합 (Sub Set) (0) | 2022.02.21 |
---|---|
조합 (Combination) (0) | 2022.02.20 |
순열 (Permutation) (0) | 2022.02.20 |
재귀 알고리즘 (0) | 2021.05.16 |
꼭 필요한 자료구조 기초 (0) | 2021.05.02 |
댓글