알고리즘 문제풀이/기본문제풀이
[기본문제풀이] dynamic_programming
로디네로
2020. 12. 28. 00:36
반응형
풀이 일시 : 2020-08-08
다이나믹프로그래밍 :
하나의 문제는 단 한번만 풀도록 하는 알고리즘으로 효율성을 개선하는 알고리즘이다.
가정1 - 큰 문제를 작은 문제로 나눌 수 있다.
가정2 - 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 작동한다.
이미 계산한 결과는 배열에 저장함으로써 나중에 꺼내서 쓰기만 하면 되게끔 한다.
문제 :
dp로 피보나치 구현
풀이 :
#include <stdio.h>
int d[100] = { 0, }; //배열 선언 및 전체 0으로초기화
int fibonacci(int x) {
if (x == 1) return 1; //1과 2는 피보나치에서 뭘 더해서 나오는 수가 아니기때문에 거른다
if (x == 2) return 1;
if (d[x] != 0){
return d[x]; //목표치 배열이 생성됐으면 값반환
}
return d[x] = fibonacci(x - 1) + fibonacci(x - 2); //구한 값을 배열 d에 저장
}
int main() {
printf("%d", fibonacci(50));
}
참고 개념정리
[개념정리] DP 동적프로그래밍
Dynamic Programing, DP, 동적프로그래밍, 동적계획법 으로 중요한 알고리즘 중 하나이다. DP란 큰 문제를 작은 문제로 나눠서 푸는 알고리즘이다. 방식은 분할정복과 같으나 분할정복은 계산한 부
dbstndi6316.tistory.com
반응형