Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 인공지능
- 로지스틱 회귀
- 선형분류
- directed graphical model
- 1차예선
- 스터디
- 델타 rule
- chapter02
- 개발순서
- 알고리즘대회
- 자바ORM표준JPA프로그래밍
- 근구하기
- 선형판별분석
- SCPC
- Numerical optimization
- 알고리즘
- vector미분
- Perceptron Convergence theorem
- MySQL
- chapter01
- 이것이 MySQL이다
- CH01
- graphical models
- Fisher discriminant analysis
- falsePosition
- 2018
- bisection
- undirected graphical model
- secant
- 5397번
Archives
- Today
- Total
computer_study
[재귀함수/DP] BAEKJOON '2747'번 '피보나치 수 '문제 (C++/python) 본문
문제 : www.acmicpc.net/problem/2747
2747번: 피보나치 수
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된��
www.acmicpc.net
-
문제 해결 아이디어
1. 일반 recursion을 사용하면 시간 초과가 나기 떄문에, 다른 방법을 사용한다.
-
python
n = int(input())
a, b = 0, 1
while n:
a, b = b, a+b
n -=1
print(a)
단순 반복문으로 값을 더해 원하는 번째의 수를 출력한다.
-
c++
#include "iostream"
using namespace std;
int dp[46]={0,};
void fibo(int num){
if(num == 0)
dp[0] = 0;
else if(num == 1)
dp[1] = 1;
else{
if(dp[num-1] == 0)
fibo(num-1);
if(dp[num-2] == 0)
fibo(num-2);
dp[num] = dp[num-1] + dp[num-2];
}
}
int main(){
int num;
scanf("%d",&num);
fibo(num);
printf("%d\n",dp[num]);
return 0;
}
dp(dynamic programming)를 이용해서 문제를 해결한다.
dp는 간단히 말하면 이미 계산한 값들을 저장해놓고, 여러번 계산을 수행하지 않도록 하는 것이다.
'알고리즘 > 문제풀이' 카테고리의 다른 글
[재귀함수] BAEKJOON ' 7490 '번 '0 만들기 '문제 (C++/python) (0) | 2020.08.11 |
---|---|
[재귀함수] BAEKJOON '1074'번 'Z'문제 (C++/python) (0) | 2020.08.07 |
[정렬/counting sort] BAEKJOON ' 10989'번 '수 정렬하기3 '문제 (C++/python) (0) | 2020.08.07 |
[정렬] BAEKJOON ' 10814'번 '나이순 정렬 '문제 (C++/python) (0) | 2020.08.07 |
[정렬] BAEKJOON ' 2750'번, '1427'번 (C++/python) (0) | 2020.08.06 |
Comments