[알고리즘] 피보나치 수 - 백준 2748

se.jeon·2023년 2월 7일
0

알고리즘

목록 보기
2/21

문제

과정

문제가 직관적이고, 유명한 카테고리여서 추가적으로 설명할 점은 크게 없는 것 같다. 처음에는 무작정 배열에다가 값을 때려넣어서 결과를 도출했었는데, 문제를 조금 더 생각 해 보니 굳이 그럴 필요가 없었다. 그래서 배열을 지우고 담아두는 공간은 세 개 만으로 처리 할 수 있게끔 수정 해 보았다.

하단은 다시 작성 해 본 코드! 둘 다 정답이긴 하다.

알고리즘에 정답은 없다지만 오답과 더 나은 답은 있는 것 같다.

문제를 풀고 풀었다고 땡 칠 게 아니라 더 개선할 수 있는 점이 있었는지, 내 코드가 별로이지는 않는지 많이 생각 해 봐야겠다는 생각이 들었다.

결과 - 초기

// 문제 :: 피보나치 수
// 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다.그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
// 이를 식으로 써보면 Fn = Fn - 1 + Fn - 2 (n ≥ 2)가 된다.
// n = 17일때 까지 피보나치 수를 써보면 다음과 같다.
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
// n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.
// 링크 :: https://www.acmicpc.net/problem/2747
// 입력 :: 첫째 줄에 n이 주어진다. n은 45보다 작거나 같은 자연수이다.
// 출력 :: 첫째 줄에 n번째 피보나치 수를 출력한다.


//#include "Class2.h"
#include <iostream>
using namespace std;


int main()
//int Solve2747()
{
//    cout << "[디버깅용] Solve2747 :: 시작지점 >> \n";

    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    long long nArray[46] = { 0, };
    long long nResult = 0;
    int numN;
    cin >> numN;

    nArray[0] = 0;
    nArray[1] = 1;
    nArray[2] = 1;

    for (int i = 2; i <= numN; i++)
    {
        nArray[i] = nArray[i - 1] + nArray[i - 2];
    }

    cout << nArray[numN];

    return 0;
}

결과 - 후기

// 문제 :: 피보나치 수
// 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다.그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
// 이를 식으로 써보면 Fn = Fn - 1 + Fn - 2 (n ≥ 2)가 된다.
// n = 17일때 까지 피보나치 수를 써보면 다음과 같다.
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
// n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.
// 링크 :: https://www.acmicpc.net/problem/2747
// 입력 :: 첫째 줄에 n이 주어진다. n은 45보다 작거나 같은 자연수이다.
// 출력 :: 첫째 줄에 n번째 피보나치 수를 출력한다.


//#include "Class2.h"
#include <iostream>
using namespace std;


int main()
//int Solve2747()
{
//    cout << "[디버깅용] Solve2747 :: 시작지점 >> \n";

	cin.tie(NULL);
	ios_base::sync_with_stdio(false);


	long long nMemo, nResult = 0;
	int numN;
	cin >> numN;

	nMemo = 1;
	nResult = 1;

	for (int i = 2; i < numN; i++)
	{
		long long nTemp = nResult;
		nResult = nMemo + nResult;
		nMemo = nTemp;

		//cout << nResult << "\n";
	}

	cout << nResult << "\n";

	return 0;
}
profile
취미 다이소

0개의 댓글