입력의 크기를 시간 복잡도에 대입해서 얻은 반복문 수행 횟수에 대해, 1초 당 반복문 수행 횟수가 1억($10^8$)을 넘어가면 시간 제한을 초과할 가능성이 있다.
종만북
위 근사치를 이용하면 간단하게 입력의 크기와 제한시간으로 정답 알고리즘의 복잡도를 대략적으로나마 예측해 볼 수 있습니다.
문제에서 가장 먼저 확인해야하는 내용은 시간제한(수행시간 요구사항)입니다.
시간제한이 1초인 문제를 만났을 때, 일반적인 기준은 다음과 같습니다.
입력이 10,000,000 개의 경우: O(N) 알고리즘
입력이 50,000 개인 경우: O(N * log N) 알고리즘
입력이 10,000 개인 경우: O(N * N) 알고리즘
입력이 400개: O(N * N * N) 알고리즘
거꾸로 이야기하면 입력이 100개 이하라면 대체로 어떤 알고리즘을 써도 풀릴 가능성이 높고, 입력이 매우 작은 경우는 완전탐색으로도 문제를 풀 수 있을 가능성이 높다는 이야기겠죠.
Header: <ctime>
clock_t clock(void);
: clock() 함수는 프로그램의 실행 시작으로부터 경과된 시간을 clock ticks 수로 반환합니다.
단위는 clock tick이지만 ms와 동일합니다. 즉 ms단위를 정수형으로 반환합니다.
ctime에 정의되어있는 CLOCKS_PER_SEC과 같이 사용하면 sec(초) 단위로 출력할 수 있습니다.
더 정밀하게 측정하고 싶다면 chrono 라이브러리를 참고하세요.
clock_t 타입
ctime
Preview)
// 측정 시작 위치
clock_t startTime = clock();
/*
측정할 코드
*/
// 측정 종료 위치
clock_t endTime = clock();
// 측정 시간 계산 (ms단위)
clock_t elapsed = endTime - startTime;
// Second로 변환
double timeInSecond = (double)(elapsed / CLOCKS_PER_SEC);
Example)
#include <iostream>
#include <ctime> /* clock_t, clock, CLOCKS_PER_SEC */
#include <vector>
using std::cout;
using std::string;
using std::vector;
int main(void)
{
vector<string> vec(100000, "bonjour");
vector<string> tmp;
// 시작 시간
clock_t startTime = clock();
// 시간 측정할 수행 코드
for (vector<string>::size_type i = 0; i != vec.size(); ++i)
{
tmp.push_back(vec[i]);
}
// 종료 시간
clock_t endTime = clock();
// Millisecond
clock_t elapsed = endTime - startTime;
// Second
double timeInSecond = (double)(elapsed / CLOCKS_PER_SEC);
cout << "Elapsed: " << timeInSecond << "s(" << elapsed << "ms)" << "\n";
return 0;
}
'개발자 > Algorithm' 카테고리의 다른 글
11724 연결요소의 개수 C++ 문제풀이 (0) | 2021.09.07 |
---|---|
1099 백준 알고리즘 문제 풀이 진행중 (0) | 2021.08.27 |
코테 시 ios_base::sync_with_stdio(false); cin.tie(null); 추가 이유 (0) | 2021.07.25 |
c++ STL 함수 remove, remove_if (0) | 2021.04.22 |
프로그래머스 문제풀이(정렬)- K번째수 (0) | 2020.10.20 |