반응형
안녕하세요.
BlockDMask 입니다.
오늘은 "내가 짠 알고리즘이 어느정도 시간이 걸렸나?" 라는 것을 알 수 있게
시간을 잴 수 있는 코드에 대해서 알아보겠습니다.
1. clock() 함수
C 언어 에서는 <time.h>, C++ 에서는 <ctime> 헤더파일에 들어있습니다.
기본형
clock_t clock(void); //프로그램이 시작하고 나서 부터 프로세서가 소모한 시간을 리턴합니다.return 타입인 clock_t는 clock ticks 를 뜻합니다.
CLOCKS_PER_SEC는 메크로 인데 clock_t 의 값을 CLOCKS_PER_SEC으로 나누면 소모한 시간(clock ticks per second)이 나옵니다.
2. 사용 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<iostream> #include<cstdio> #include<ctime> using namespace std; int main(void){ //시간을 시작하고 싶은 시간 clock_t start = clock(); // 프로그램 수행시간 부터 현재까지의 시간 //시간을 계산하고 싶은 알고리즘을 넣습니다 printf("%0.5f\n",(float)(clock() - start)/CLOCKS_PER_SEC); /*프로그램 수행 시간부터 현재 까지의 시간 - 프로그램 수행시간부터 아까 start 변수까지의 시간 = start 변수에서 부터 ~ 지금 printf 라인까지 걸린시간이 됩니다. 이를 CLOCK_PER_SEC으로 나누면 됩니다. */ return 0; } | cs |
3. 실제 사용 예시
실제 시간이 많이 걸리는 DFS 기반의 문제에 사용해 보겠습니다.
N-Queen 문제 에서 14를 넣었을때와 15를 넣었을때의 시간이 궁금하지 않습니까?
: 상세한 코드는 [여기] 에 있습니다.
: 코드가 조금 길기 때문에, main함수에서 호출하는 부분만 보이겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | int main(void){ cin >> n; arr = new bool[n]; d1 = new bool[2*n-1]; d2 = new bool[2*n-1]; clock_t s = (int)clock(); //요기서 부터 Solution(0); //DFS 기반으로 구현한 N-Queen 알고리즘입니다. printf("%0.4fs\n", (float)(clock() - s) /CLOCKS_PER_SEC); //요기까지 걸린 시간은? delete[] arr; delete[] d1; delete[] d2; return 0; } | cs |
>> 14를 넣은 결과
>> 15를 넣은 결과
아닛! 이렇게나 많이 차이나는군요!
<참고 자료>
http://www.cplusplus.com/reference/ctime/clock/
http://www.cplusplus.com/reference/ctime/CLOCKS_PER_SEC/
감사합니다.
도움이 쬐~~~끔이라도 되었다면 하트 한번 부탁드립니다!!
반응형
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] rand, srand, time 랜덤함수에 대해서 (난수생성) (37) | 2019.01.11 |
---|---|
[C언어/C++] pow, sqrt 함수에 대해서(루트함수, 제곱, 제곱근) (4) | 2019.01.04 |
[C언어] 동적할당 정리2 (malloc, free 예제) (3) | 2018.10.31 |
[C언어/C++] assert 함수에 대해서 : 디버깅을위한, 더 안전한 코드를 위한 오류 검출 방법 (2) | 2018.10.24 |
[C언어/C++] define 매크로와 inline 함수에 대해서 (3) | 2017.11.03 |
[C언어/C++] 올림, 내림, 반올림 (floor, ceil) 함수 (8) | 2017.08.11 |
[C언어] 배열포인터, 포인터배열 정리 (pointer) (19) | 2017.07.14 |
[C언어] 동적할당 정리1 (malloc, realloc, calloc, free 함수) (0) | 2017.07.10 |