반응형
//1003
#include<iostream>
using namespace std;
struct zeroandone{
int zero;
int one;
};
zeroandone array1[41];
int used[41] = {0,};
zeroandone fibo(int n){
zeroandone temp;
if(used[n] == 1){
return array1[n];
}else if(n == 0){
temp.zero = 1;
temp.one = 0;
return temp;
}else if(n == 1){
temp.zero = 0;
temp.one = 1;
return temp;
}else{
zeroandone temp1 = fibo(n-1);
zeroandone temp2 = fibo(n-2);
temp.zero = temp1.zero + temp2.zero;
temp.one = temp1.one + temp2.one;
array1[n] = temp;
used[n] = 1;
return temp;
}
}
int main(){
int n;
int temp;
cin >> n;
for(int i=0; i<n; i++){
cin >> temp;
cout << fibo(temp).zero << " " << fibo(temp).one << "\n";
}
}
1년동안 접었던 알고리즘을 요새 다시 감을 잡고 있다.
이 문제의 핵심은 재귀를 통해 단순히 피보나치 함수를 구하는 것이 아닌 다이나믹 프로그래밍의 메모이제이션을 활용하여 사용한 값을 다시 재활용해서 시간을 줄이는 것이 핵심이다.
반응형
'코딩 이야기 > 백준 풀이' 카테고리의 다른 글
백준 7576번: 토마토 C++ 코드(BFS) (0) | 2023.03.22 |
---|---|
백준 1049번: 기타줄 C++코드(그리디 알고리즘, Greedy) (1) | 2023.03.15 |
백준 23814번: 아 저는 볶음밥이요 C++코드(수학) (0) | 2021.12.27 |
백준 1260번: DFS와 BFS C++코드(DFS, BFS) (0) | 2021.12.21 |
백준 1476번: 날짜 계산 C++코드(브루트포스, Bruteforce) (0) | 2021.12.21 |