[BOJ] 2748번 : 피보나치 수 2

2024. 9. 18. 14:14Algorithm

1. problem : 

https://www.acmicpc.net/problem/2748

 

2. solution 1 :

#include <bits/stdc++.h>
using namespace std;
int n;
long long dp[100]; 
long long dynamic_func(int k) {
	if (k == 0 || k == 1) {
		return k;
	}
	if (dp[k]) return dp[k]; 
	return dp[k] = dynamic_func(k-1) + dynamic_func(k-2);
}
int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0); 
	cin >> n; 
	long long ans = dynamic_func(n); 
	cout << ans << '\n';
}

dp를 이용하여, 해결하였다. 단순 재귀를 이용하여 해결할 수 있지만,  단순재귀를 이용하면 틀리도록 출제하도록 한 것 같았다. 

dp에 이미 계산된 결과는 저장해, 다시 한번 계산하는 일이 없도록 코드를 작성했다. 

 

3.  solution 2 :

// Authored by : jihwan0123
// Co-authored by : -
// http://boj.kr/fca58deb2214447782fe6483572acdb8
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll d[100];
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  d[1] = 1, d[2] = 1;
  for (int i = 3; i <= n; i++)
    d[i] = d[i - 1] + d[i - 2];
  cout << d[n];
}

source code 출처 : https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x10/solutions/2748.cpp

 

basic-algo-lecture/0x10/solutions/2748.cpp at master · encrypted-def/basic-algo-lecture

바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.

github.com

이 코드가 훨씬 더 효율적이고, 가독성이 좋았다. dp에 메모만 하면 되기 때문에, 굳이 재귀 말고 반복문으로 처리를 했다. 

'Algorithm' 카테고리의 다른 글

[BOJ] 2468번 : 안전 영역  (0) 2024.09.18
[BOJ] 5014번 : 스타트링크  (0) 2024.09.18
[BOJ] 1759번 : 암호 만들기  (1) 2024.09.16
[BOJ] 2667번 : 단지번호붙이기  (0) 2024.09.13
[BOJ] 2583번 : 영역 구하기  (0) 2024.09.12