CodeNote
Coding Note
CodeNote
전체 방문자
오늘
어제
  • 전체 보기 (35)
    • C++ (33)
      • Modern C++ (12)
      • Modern C++ STL (0)
      • Thread (16)
      • Thread (Async) (5)
    • 디자인패턴 (0)
    • Algorithm (2)
    • Electron (0)
    • Python (0)

블로그 메뉴

  • 홈
  • Github
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Free
  • C++
  • C++ #Memory
  • LOCK
  • 자료구조
  • mutex

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
CodeNote

Coding Note

Algorithm

[DP] 음수 피보나치 수열

2022. 8. 28. 20:23

음수 피보나치 수열

일반 피보나치 수열은 F(n) = F(n-1) + F(n-2) (단, n은 1보다 클 경우) 로 정의된다.

즉,

  • F(0) = 0, F(1) = 1, F(2) = F(1) + F(0) = 1 ....... 로 확장된다.

0 이하에 대해서도 피보나치 수열 적용이 가능한데, 

  • F(1) = F(0) + F(-1)
  • 1 = 0 + F(-1)

즉, F(-1) = 1 이다. 이를 확장한다면  ... -8, 5, -3, 2, -1, 1, 0, 1, 1, 2, 3, 5, 8... 의 순으로 진행된다.

규칙성을 보면 음수 방향으로 갈 때 각 짝수 Index 마다 마이너스가 붙어서 음수가 되는 것을 확인할 수 있다.

Value -8 5 -3 2 -1 1 0
Index (-) 6 5 4 3 2 1 0

인덱스는 마이너스순으로 진행되지만 편의상 인덱스를 양수로 표시한다. 표로 보니 더 명확하게 보인다.

계산은 양수일 때 피보나치 수열로 하고 짝수 인덱스마다 -1을 곱해주면 되겠다.

 

Example Code

// 70만 되도 피보나치 수열 값은 190조가 넘어가기 때문에 long long 타입으로 지정한다.
long long arr[71]; // 문제의 최대값+1로 지정한다.
string fibo(int n)
{
    int num = abs(n); // 절대값으로 변경
    arr[0] = 0;
    arr[1] = 1;
    for (int i = 2; i <= num; i++)
    {
        arr[i] = arr[i-1] + arr[i-2];
    }
    // 음수일 때 (n이 짝수인 경우에만 -1을 곱해준다.) 
    if (n < 0 && num % 2 == 0)
    {
        return to_string(arr[num] * -1);
    }
    return to_string(arr[num]);
}

 

'Algorithm' 카테고리의 다른 글

[정리] 알고리즘에 유용한 계산 정리  (0) 2022.08.23
    'Algorithm' 카테고리의 다른 글
    • [정리] 알고리즘에 유용한 계산 정리
    CodeNote
    CodeNote
    기록 블로그

    티스토리툴바