피보나치 수열

2025. 10. 10. 17:52·C++ 프로그래머스/C++ Math

피보나치 수열이란

0과 1로 시작하여 a -> b -> c -> d - > e -> f 일때 d는 a + b 인값 e는 d + e인 값을 나타내는 수열

즉 0 -> 1 -> 1 -> 2 -> 3 -> 5 -> 8 이런식으로 다음 숫자가 앞의 두 숫자의 합으로 나타내는 수열을 뜻한다

 

재귀 함수를 사용하여 피보나치 수열을 구현할수 있다

#include <iostream>
#include <stdio.h>

using namespace std;
int fibonachi(int n)
{
	if (n <= 1)
		return n;
	else
		return fibonachi(n - 1) + fibonachi((n - 2));
}
int main()
{
	int n = 5;
	int result = fibonachi(n);
	printf("피보나치(%d)의 결과 : %d\n", n, result);
	return 0;
}

 

 

이런식으로 구현한다면 시간복잡도면에서 매우 비효율적이다

왜냐하면 f(4)를 구할려면 f(3)과 f(2)의 값이 필요하고 f(5)를 구할려면 f(4)와 f(3)이 필요하기떄문에

했던 연산을 또하고 또해서 매우 비효율적이다

그래서 f(n)을 미리 구해서 그걸 기억했다가 꺼내서 쓴다면 중복연산을 피하고 효율적일것이다

그걸 Memoization이라고 한다

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;
vector<int> mmn;
int fibonachi(int n)
{
	if (n <= 1)
		return n;

	//이미 계산된 값이면 그대로 반환
	if (mmn[n] != -1)
		return mmn[n];

	//계산하고 저장
	mmn[n] = fibonachi(n - 1) + fibonachi(n - 2);
	return mmn[n];
}

 

프로그래머스 의 피보나치 수 라는 문제를 확인해보자

 

아까 사용한 memoization 방식을 사용하고 조건을 추가해주면된다

#include <string>
#include <vector>

using namespace std;
vector<int> memoization;
int solution(int n) 
{
    const int modNum = 1234567;

    if (memoization.size() <= n)
        memoization = vector<int>(n + 1, -1);

    if (n <= 1)
        return n;

    if (memoization[n] != -1)
        return memoization[n];

    
    memoization[n] = (solution(n - 1) + solution(n - 2)) % modNum;
    return memoization[n];
}

 

'C++ 프로그래머스 > C++ Math' 카테고리의 다른 글

프로그래머스(C++) - 최대공약수와 최소공배수  (0) 2025.05.07
'C++ 프로그래머스/C++ Math' 카테고리의 다른 글
  • 프로그래머스(C++) - 최대공약수와 최소공배수
lucodev
lucodev
언리얼 포폴개발 일기
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (213) N
      • Unreal 프로젝트 다이어리 (110) N
        • 첫번째 프로젝트 (73)
        • 두번째 프로젝트 (37) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 (52)
        • Stack,Queue (7)
        • Hash (4)
        • Heap (2)
        • Sort (5)
        • Exhaustive search (5)
        • Greedy (2)
        • BFS , DFS (7)
        • Graph (2)
        • Dynamic Programming (1)
        • C++ Math (2)
        • 기타 문제 (14)
      • C++ 백준 (4)
      • C++ 팁 (1)
      • 개인 코테 & 스타디 <비공개> (29)
        • 코드 개인보관함 (9)
        • 코딩테스트+@ (11)
        • 알고리즘 스타디 (6)
        • 알고리즘 스타디 과제 (3)
        • 비공개 (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    unreal 모션매칭
    unreal
    언리얼 motionmatching
    언리얼 parkour
    unreal inventory
    언리얼 behaviortree
    unreal 인벤토리
    언리얼 ui
    언리얼 파쿠르
    언리얼 인벤토리
    언리얼
    언리얼 비헤이비어트리
    언리얼 프로그래스바
    unreal 시퀀스
    unreal 파쿠르
    언리얼 behavior tree
    언리얼 컷씬
    Unreal Parkour
    언리얼 모션매칭
    언리얼 시퀀스
  • hELLO· Designed By정상우.v4.10.3
lucodev
피보나치 수열
상단으로

티스토리툴바