| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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
													
											
												
												- 논문 리뷰
 - logarithm mapping
 - exponential mapping
 - 백준 1253번
 - rigid KPConv
 - Raspberry Pi
 - OpenCV
 - 경제 공부
 - 2 포인터 알고리즘
 - SLAMKR
 - ros2
 - PointNet
 - IMAGE
 - PointNet++
 - 코딩테스트 공부
 - 입문 Visual SLAM
 - 코딩테스트
 - 부자 아빠 가난한 아빠
 - deformable KPConv
 - OpenCV 모듈
 - Slam
 - visual slam
 - 코딩 테스트
 - C++
 - Docker
 - KPConv
 - point cloud
 - 제 6장
 - FeatureMatching
 - TURTLEBOT3
 
													Archives
													
											
												
												- Today
 
- Total
 
꿈꾸는 개발자
코딩 테스트 공부 - 시간 복잡도 본문
C++ 기준에서 1억번의 연산 = 약 1초로 볼 수 있다.
코딩 테스트의 핵심 중 하나는 문제마다 주어진 시간 복잡도를 고려해 적절한 알고리즘을 선택하는 것
코딩 테스트에서는 빅-오 표기법($ O(n) $)을 기준으로 수행 시간을 계산하는 것이 좋다.
예를 들어보자.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    int findNumber;
    int N = 1000000;
    srand(time(NULL));
    findNumber = rand() % 1000000;
    
    for (int i = 0; i < N; i++) {
        if (i == findNumber) {
            cout << i;
            break;
        }
    }
}
위 코드에서 시간 복잡도는 $ O(n) $ 이다. 이유는 for 문을 돌 때, N 만큼 반복하기 때문이다.
만약, for 문이 두 번 반복된다면 시간 복잡도는 어떻게 될까?
#include <iostream>
using namespace std;
int main()
{
    int N = 10000;
    int cnt = 1;
    
    for(int i = 0; i < N; i++)
        cout << "연산 횟수 : " << cnt++ << endl;
    for(int i = 0; i < N; i++)
        cout << "연산 횟수 : " << cnt++ << endl;
}
for 문이 두 번 반복되면 2N 만큼 반복적인 연산을 수행한다. 그러나, 시간 복잡도 기준으로는 $ O(n) $과 동일하다.
(2배가 되던 3배가 되던 $ O(n) $이 된다. 만약, N 번 이상 반복될 경우 그때의 시간 복잡도는 $ O(n) $이 아닌 $ O(n^{2}) $이 되기 때문이다.)
그럼 for 문이 중첩된다면?
#include <iostream>
using namespace std;
int main()
{
    int N = 10000;
    int cnt = 1;
    
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++)
            cout << "연산 횟수 : " << cnt++ << endl;
    }
}
위와 같이 for 문이 두 번 중첩된 경우 $ O(n^{2}) $ 이 된다.
가장 처음에서 말한 C++ 에서 1억 번의 연산이 1초라고 가정한다면, 알고리즘 문제의 시간 제한이 2초일 경우 2억 번의 연산만으로 해결해야하는 문제가 된다.
이를 통해 시간 복잡도를 적용하여 더 나은 알고리즘을 적용하는 것이 코딩 테스트의 핵심이라고 한다.
이를 통해 앞으로의 코딩 테스트 공부에서 생각해보고 사용할 수 있도록 적용할 예정이다.
참고한 영상
https://www.youtube.com/watch?v=v0ZF1cA0afA
'코딩 테스트' 카테고리의 다른 글
| 코딩 테스트 공부 - 퀵 정렬(백준 11004번) (0) | 2023.12.26 | 
|---|---|
| 코딩 테스트 공부 - 버블 정렬(백준 1337번) (1) | 2023.12.22 | 
| 코딩 테스트 공부 - C++/좋은 수 구하기(백준 1253번) (1) | 2023.12.21 | 
| 코딩 테스트 공부 - 구간 합 (1) | 2023.12.20 |