본문 바로가기

[Project Euler] Problem 002


반복문(Java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Problem002 {
 
    public static void main(String[] args) {
        int n1 = 1, n2 = 2;
        int n3 = n1 + n2;
        int sum = 2;
        
        while(n3 <= 4000000) {
            n3 = n1 + n2;
            
            if(n3%2 == 0) {
                sum += n3;
            }
            
            n1 = n2;
            n2 = n3;
        }
        
        System.out.println("Sum:" + sum);
        
    }
 
}
cs



재귀함수(C)

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
#include <stdio.h>
 
#define LIMIT 4000000
 
int fib(int);
 
int main()
{
    int i;
    int sum = 0;
    int temp;
 
    for (i = 1; (temp = fib(i)) <= LIMIT; ++i)
    {
        if (temp % 2 == 0) { sum += temp; }
    }
    
    printf("sum: %d\n", sum);
 
    return 0;
}
 
int fib(int n)
{
    return ((n == 0|| (n == 1)) ? n : (fib(n - 1+ fib(n - 2));
}
cs


정답: 4613732

Java 실행 시간: 0.0003초

C 실행 시간: 2초


참고로 C 코드에서 for 문 부분을 다음과 같이 쓸 수도 있다.


for (int i = 1; temp <= LIMIT; ++i, temp = fib(i))

{

    if (temp % 2 == 0) { sum += temp; }

}


실행시간의 차이는 거의 없다.

'Programming > Solutions' 카테고리의 다른 글

[Project Euler] Problem 004  (0) 2019.03.20
[Project Euler] Problem 003  (0) 2019.03.19
[BAEKJOON] 2839번: 설탕 배달  (0) 2019.03.19
[BAEKJOON] 1002번: 터렛  (0) 2019.03.19
[Project Euler] Problem 001  (0) 2019.03.17