컴공과컴맹효묘의블로그

C언어 실행 시간 측정하는 clock함수 본문

컴퓨터/C언어

C언어 실행 시간 측정하는 clock함수

효묘 2019. 8. 15. 21:51
반응형

이번에 알고리즘을 공부하려고 하는데 책의 도입부분에서 알고리즘의 시간을 측정할 수 있는 방법을 알려주었다.

실행시간을 측정하는 아이디어는 프로그램(알고리즘)을 실행하기 전의 시간을 측정하고, 실행한 후의 시간을 한번 더 측정해서 측정된 수 시간의 차를 계산하는 것이다.

 

[헤더파일]

일단 clock()함수를 사용하려면 time.h 를 인클루드 해야한다.

 

[함수 설명]

clock()함수는 호출되었을때 밀리세컨드 단위로 시스템 시각을 반환한다.

+밀리세컨드(ms, millisecond)란?

    밀리세컨드는 1초(sec)를 1000등분으로 쪼갠 시간을 뜻한다. 따라서 1초는 1000밀리세컨드가 된다.

 

[주요 상수]

CLOCKS_PER_SECtime.h에 정의되어있다.

#define CLOCKS_PER_SEC 1000

 

[일반 적인 사용법]

사용법은 clocks_t 자료형으로 startfinish변수들을 선언하고, 알고리즘의 시작직전과 종료직후에 clock()으로 받으면 된다.

clock_t start, finish;
double duration;

start = clock(); // 시작지점 시간
//Algorithm...
//...
//...
finish = clock(); // 종료지점 시간
duration = (double)(finish-start)/CLOCKS_PER_SEC; // (종료지점 시간 - 시작지점 시간)/1000
printf("%f초 입니다.",duration);

 

 

[예제 적용]

다음은 하노이탑 알고리즘을 실행시켰을 때 얼마나 시간이 걸리는지 알아보는 코드이다. 초보자에겐 하노이탑 알고리즘은 어려울 수 있으니 예제로만 참고하길 바랍니다.

백준 알고리즘 히노이탑 풀이법 바로가기

#include<stdio.h>
#include<stdlib.h>
#include<time.h> 


static int move = 0;
void hanoi(int n, char a, char b, char c){
	if(n==1){
		move++;
		//printf("%d %d\n",a,c);
	}else{
		hanoi(n-1,a,c,b);
		move++;
		//printf("%d %d\n",a,c);
		hanoi(n-1,b,a,c);
	}
	
}

int sqr(int k){
	if(k==1)
		return 2;
	else
		return sqr(k-1)*2;
}

int main(){
	int N;
	clock_t finish, start;
	double duration;
	
	char a = 1, b = 2, c = 3;
	scanf("%d",&N);
	printf("%d\n",sqr(N)-1);
	start = clock();
	hanoi(N,a,b,c);
	finish = clock();
	duration = (double)(finish-start)/CLOCKS_PER_SEC;
	printf("걸린 시간 : %lf",duration);
	return 0;
}

 

반응형
Comments