1부터 n까지 합을 구하는 두 가지 함수 코드 비교 입니다.


작성 언어는 C++이면 c언어에서 사용할 때는 cout endl 함수를 printf 로 변경하시면 됩니다.


sum 함수와 recursive 함수의 경우 언어에 상관없이 가져다 쓰시면 됩니다.


- 예  제 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
using std::cout;
using std::endl;
 
int sum(int n) { //1부터n까지의 합(for)
    int sum = 0;    //초기화
    for (int a = 1; a <= n; a++)
        sum += a;
    return sum;
}
 
int recursiveSum(int n) { //1부터n까지의 합(재귀)
    if (n == 1//탈출 조건
        return 1;
    else
        return n + recursiveSum(n - 1); //재귀호출
}
 
int main() {
    cout << "sum(for) : " << sum(4000)<<endl;
    cout << "sum(재귀) : " << recursiveSum(4000<< endl;
    return false;
}



Posted by 꿈만은공돌
,

프로그래밍을 하다보면 딜레이가 발생하거나해서 어느 부분이 느린지 알아내야 하는 경우가 생길 수 있습니다.


또는 알고리즘을 공부하다보면 내가 구현한 알고리즘의 속도를 알고싶을 때가 있습니다.


그럴때 특정 구간에 코드 실행시간을 알아야내야 하는 경우에 필요한 포스팅 입니다.


JAVA에서 코드에 실행 시간을 측정하거나 특정 구간에 시간이 얼마나 소요되는지를 알고 싶을때 사용하는 코드 입니다.


현재 시간을 받아오는 System 함수인 System.currentTimeMillis() 함수를 이용하면 쉽게 구할 수 있습니다.

시작 구간과 끝나는 구간에 각각 해당 함수를 써서 시간을 받아오고 두 시간간의 차이를 계산하면 ms 단위의 시간차를 구할 수 있습니다.


ms를 초(s)로 변환하고 싶다면 /1000을 해주면 됩니다.

추가로 초(s)를 분(m) 구하고 싶다면 /60을 추가로 해주면 됩니다.




- 사용 방법 -

1
2
3
4
5
6
7
long beforeTime = System.currentTimeMillis(); //코드 실행 전에 시간 받아오기
        
//실험할 코드 추가
        
long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
long secDiffTime = (afterTime - beforeTime)/1000//두 시간에 차 계산
System.out.println("시간차이(m) : "+secDiffTime);



- 사용 예시 -

1
2
3
4
5
6
7
8
9
10
11
12
13
long beforeTime = System.currentTimeMillis();
        
int sum = 0;
for (int i = 0; i < 1000000; i++) {
    for (int j = 0; j < 50000; j++) {
        sum += i*j;
    }
}
System.out.println(sum);
    
long afterTime = System.currentTimeMillis(); 
long secDiffTime = (afterTime - beforeTime)/1000;
System.out.println("시간차이(m) : "+secDiffTime);




- 출력 결과 -

1636142336 

시간차이(m) : 19

Posted by 꿈만은공돌
,





프로그래밍을 하다보면 딜레이가 발생하거나해서 어느 부분이 느린지 알아내야 하는 경우가 생길 수 있습니다.

또는 알고리즘을 공부하다보면 내가 구현한 알고리즘의 속도를 알고싶을 때가 있습니다.

그럴때 특정 구간에 코드 실행시간을 알아야내야 하는 경우에 필요한 포스팅 입니다.

C언어, C++에서 프로그램 실행시간을 측정하는 방법은 두 가지가 있습니다.




1. time 함수를 이용한 방법

우선 time 함수를 이용한 방법 입니다.

time(NULL) 함수를 이용하여 받아옵니다.

단점은 ms단위가 아닌 초(s) 단위로 측정이 됩니다.

#include <time.h> 헤더파일을 포함시키고 아래와 같이 사용하시면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <time.h>
 
int main() {
    time_t start, end;
    double result;
    int i, j;
    int sum = 0;
 
    start = time(NULL); // 시간 측정 시작
 
    for (i = 0; i < 100000; i++) {
        for (j = 0; j < 10000; j++) {
            sum += i * j;
        }
    }
 
    end = time(NULL); // 시간 측정 끝
    result = (double)(end - start);
    printf("%f", result); //결과 출력
    return 0;
}




2. clock 함수를 이용한 방법

clock 함수를 이용하여 앞에 방법의 단점을 해결하여 ms 단위로 시간을 측정 할 수 있습니다.
time 함수와 마찬가지로 include<time.h> 헤더 파일을 포함 시켜야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <time.h>
 
int main() {    
    clock_t start, end;
    double result;
    int i,j;
    int sum = 0;
 
    start = clock(); //시간 측정 시작
    
    for (i = 0; i < 100000; i++) {
        for (j = 0; j < 10000; j++) {
            sum += i * j;
        }
    }
 
    end = clock(); //시간 측정 끝
    result = (double)(end - start);
    printf("%f", result);
    return 0;
}



clock 함수는 아래와 같이 1초 1000 clock으로 정의되어 있습니다.
따라서 1clock은 1ms 입니다.
Visual studio 에서 clock 함수에서 F12를 누르면 아래와 같은 정의를 볼 수 있습니다.





Posted by 꿈만은공돌
,