백준 1003 피보나치 함수

<Bottom-Up> 방식


n은 최대 40까지이므로 for문을 돌려 40까지의 답을 구해 놓은 후 풀었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
using namespace std;
 
int d[41][2];
 
int main() {
    d[0][0= d[1][1= 1;
    d[0][1= d[1][0= 0;
 
    for (int i = 2; i <= 40; i++) {
        d[i][0= d[i - 1][0+ d[i - 2][0];
        d[i][1= d[i - 1][1+ d[i - 2][1];
    }
    int t;
    scanf("%d"&t);
    while (t--) {
        int n;
        scanf("%d"&n);
        printf("%d %d\n", d[n][0], d[n][1]);
    }
    return 0;
}
 
cs





<Top-Down 방식>


규칙을 잘 살펴보면 n일 때의 0의 갯수는 n-1일 때의 1의 갯수와 같다.


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 <cstdio>
using namespace std;
 
int d[41];
 
int fibonacci(int n) {
    if (d[n] > 0return d[n];
    if (n == 0return 0;
    else if (n == 1return 1;
    else {
        return d[n] = fibonacci(n - 1+ fibonacci(n - 2);
    }
}
 
int main() {
    int t;
    scanf("%d"&t);
    while (t--) {
        int n;
        scanf("%d"&n);
        if (n == 0printf("1 0\n");
        else printf("%d %d\n", fibonacci(n-1), fibonacci(n));
    }
    return 0;
}
 
cs



'Algorithm' 카테고리의 다른 글

백준 2163 초콜릿 자르기  (0) 2018.05.18
백준 1010 다리 놓기  (0) 2018.05.18
백준 1149 RGB거리  (0) 2018.05.18
백준 1389 케빈 베이컨의 6단계 법칙  (0) 2018.05.17
백준 11403 경로 찾기  (0) 2018.05.17
더보기

댓글,

jayharvey

머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)