[알고리즘] 동적 계획법 (Dynamic Programming)
글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다
목차
인프런 Rookiss님의 '자료구조와 알고리즘' 강의를 기반으로 정리한 필기입니다.
😎 [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘 강의 들으러 가기!
동적 계획법 (Dynamic Programming)
본문내용넣기
동적 계획법 TIPS
- 기저 사항
- 캐시 확인
- 구하기
위의 3가지 사항을 고려하여 코드를 짠다.
이항 계수 (Combination)
Q) 상자 안에 공 5개가 있다. 공 2개를 꺼내는 방법은?
A) 5C2
이항 계수 구하기 구현
#include <iostream>
#include <thread>
#include <windows.h>
using namespace std;
int combination(int n, int r)
{
// 기저 사례 (안 뽑거나 다 뽑거나)
if (r == 0 || n == r)
return 1;
return combination(n - 1, r - 1) + combination(n - 1, r);
}
int main()
{
__int64 start = GetTickCount64();
int lotto = combination(45, 6);
__int64 end = GetTickCount64();
cout << end - start << "ms" << endl;
}
|
cs |
동적 계획법 구현
#include <iostream>
#include <thread>
#include <windows.h>
using namespace std;
// 메모이제이션(Memoization)
int cache[50][50];
int combination(int n, int r)
{
// 기저 사례 (안 뽑거나 다 뽑거나)
if (r == 0 || n == r)
return 1;
// 이미 답을 구한 적이 있으면 바로 반환
int& ret = cache[n][r];
if (ret != -1)
return ret;
// 새로 답을 구해서 캐시에 저장
return ret = combination(n - 1, r - 1) + combination(n - 1, r);
}
int main()
{
::memset(cache, -1, sizeof(cache)); // cache는 음수값이 나올 수 없으므로 -1을 초기값으로 세팅해준다.
__int64 start = GetTickCount64();
int lotto = combination(45, 6);
__int64 end = GetTickCount64();
cout << end - start << "ms" << endl;
}
|
cs |
마무리
마무리
'⭐ Programming > 자료구조와 알고리즘' 카테고리의 다른 글
[알고리즘] 동적계획법 - Triangle Path (0) | 2022.11.09 |
---|---|
[알고리즘] 동적계획법 - LIS (Longest Increasing Sequence) (0) | 2022.11.09 |
[알고리즘] 프림 알고리즘(Prim Algorithm)을 이용한 길찾기 (0) | 2022.11.08 |
[알고리즘] 크루스칼 알고리즘(Kruskal Algorithm)을 이용한 길찾기 (0) | 2022.11.07 |
[알고리즘] 최소 신장 트리, 크루스칼 알고리즘(Kruskal Algorithm) (0) | 2022.11.07 |
댓글
이 글 공유하기
다른 글
-
[알고리즘] 동적계획법 - Triangle Path
[알고리즘] 동적계획법 - Triangle Path
2022.11.09 -
[알고리즘] 동적계획법 - LIS (Longest Increasing Sequence)
[알고리즘] 동적계획법 - LIS (Longest Increasing Sequence)
2022.11.09 -
[알고리즘] 프림 알고리즘(Prim Algorithm)을 이용한 길찾기
[알고리즘] 프림 알고리즘(Prim Algorithm)을 이용한 길찾기
2022.11.08 -
[알고리즘] 크루스칼 알고리즘(Kruskal Algorithm)을 이용한 길찾기
[알고리즘] 크루스칼 알고리즘(Kruskal Algorithm)을 이용한 길찾기
2022.11.07