본문 바로가기
Programming/Algorithm

백준 피보나치 수열

by OKOK 2018. 1. 29.

#include <iostream>


using namespace std;


int Fibonacci(int n) {

int arr[3] = { 0,1,1 };

for (int i = 2; i < n; i++) {

arr[(i + 1) % 3] = arr[i % 3] + arr[(i - 1) % 3];

}

return arr[n % 3];

}


int main(void) {

int num;

cin >> num;

cout << Fibonacci(num);

return 0;


피보나치 수열 포문으로 만드는 것 이렇게 가능하구나, 오케이요. 피보나치 수열에 대해서 이렇게 풀어쓰기가 가능합니다. 오케이요. 재귀로 만드는 것도 가능합니다.  


#include <iostream>

#include <cstring>

#include <cstdio>


using namespace std;


template <typename T>

class fibonacci {

private:

T cache[91];

int n;

public:

fibonacci() {

memset(cache, -1, sizeof(T) * 91);

cache[0] = 0;

cache[1] = 1;

}


void setN() {

cin >> n;

}

void solution() {

if (n < 2) {

printIdx(n);

}

else {

recursive(n);

printIdx(n);

}

}

T recursive(int n) {

if (cache[n] > -1) return cache[n];

cache[n] = recursive(n - 2) + recursive(n - 1);

return cache[n];

}


void printIdx(int n) const {

cout << cache[n] << endl;

}


void printAll() const {

for (int i = 0; i < 91; i++) {

printf("[%d]->%lld\n", i, cache[i]);

}

}

};


int main(void) {

fibonacci<long long> fi;

fi.setN();

fi.solution();

return 0;


이것말고 다른 방법으로 풀이가 가능한가요? 이것은 데이터를 간다하게 처리하는 방법인 것 같은데, 어떻게 확인할 수 있을까요.


여기서 알 수 있는 것들은 자료형을 정의할 수 있다는 것입니다. 그리고 클래스를 정의했습니다. 프라이빗이랑 퍼블릿 차이가 명확히 무엇인지를 알아봅니다.