초기 네이버 기록/알고리즘(C)

백준 피보나치 함수 1003번

뜨거운 개발자 2023. 1. 4. 00:00

이문제는 동적 프로그래밍을 하면서 취코테랑 같은 문제라고 생각해서 접근했다가 안 풀려서 상당히 당황 했었지만 내 나름의 동적프로그래밍을 해봤다.. 하지만 이게 가장 효율적인 코드인가는 잘 모르겠다.

​내 코드

#include<stdio.h>

int done[41] = { 0 };
int dzero[41] = { 0 };

void fibo(int n)
{
    dzero[0] = 1;
    dzero[1] = 0;
    done[0] = 0;
    done[1] = 1;
    if (n < 2)
        return;
    int check = 2;
    for (int i = 2; i <= n; i++)
    {
        if (done[i] == 0 || dzero[i] == 0)
        {
            check = i;
            break;
        }
    }
    for (int i = check; i <= n; i++)
    {
        dzero[i] = dzero[i - 1] + dzero[i - 2];
        done[i] = done[i - 1] + done[i - 2];
    }
}

int main()
{
    int input;
    scanf("%d", &input);
    int test;
    for (int i = 0; i < input; i++)
    {
        scanf("%d", &test);
        fibo(test);
        printf("%d %d\n", dzero[test], done[test]);
    }
}

참고 코드

이 코드가 훨씬 더 깔끔하구나 피보나치 함수에서 0이 나온 횟수는 n-1 의 횟수라는걸 몰랐다.

이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.

728x90