동적계획법 2

다이나믹 프로그래밍 - 기초

다이나믹 프로그래밍에 대해서 알아봅시다. 기초 단계에서 다이나믹 프로그래밍은 브루트 포스(완전탐색법)으로 구현하였을때 너무 오래걸리는 문제를 풀기위하여 이전에 구한 답을 기억하였다가 활용하는 것을 뜻합니다. (메모이제이션) 일단 문제와 함께 이해해 봅시다. https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 요약을 하자면 N을 나누기 3을 하던 N / 2를 하던 N - 1 해서 1로 만들어야 합니다. 1로 만들 때의 최소 계산 횟수가 몇 번인가를 구해야 합니다. 푸는 방법을 생각해 보면 처음에는 'N을 최대한 작게 만들기 위해서는 N / 3, N / 2, ..

[C/C++] 백준 1463번 - 1로 만들기, 다이나믹 프로그래밍(동적계획법)

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 완성된 코드: #include #include // min을 쓰기 위한 헤더 파일#define fastio() ios::sync_with_stdio(0),cin.tie(0); // 빠른 입출력을 위한 코드#define INF 100000000using namespace std;int dp[1111111]; // 이전에 나온 값을 기억할 배열, 전역변수 이므로 0으로 초기화 되어있다.int solve(int n, int cnt) { if (n == 1) return cnt; // n이 1이 된다면 cnt를 리턴한..