반응형
dp배열을 미리 생성한 뒤 값을 찾는다.
dp인줄 모르고 풀어야하는데.. 궁금해서 알고리즘 분류 봤더니 dp로 바로 풀게됐다..
어느때 dp로 풀어야할까 ?
N 값을 보면 N이전의 값을 참조해야하는데, 이렇게 반복적으로 참조되는경우 dp로 풀면 시간단축할 수 있다.
#include <bits/stdc++.h>
using namespace std;
int dp[1000001]; //크기 유의, 10^6 인걸 10만으로 잡았다가 계속 런타임에러 ㅠ
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
dp[0] = 0;
dp[1] = 0;
for(int i = 2; i<=N+1 ; i++)
{
//3, 2 모두 나누어 떨어지는경우
if( i%3 == 0 && i%2 == 0)
{
//3으로 나눴을때 dp값, 2로 나눴을때 dp값, i-1일때 dp값 중 minimum
dp[i] = min(dp[i/3]+1, min(dp[i/2]+1, dp[i-1]+1));
}
// 3으로만 나누어 떨어지는경우
else if( i%3 ==0 && i%2 != 0)
{
//3으로 나눴을때 dp값,i-1일때 dp값 중 minimum
dp[i] = min(dp[i/3]+1, dp[i-1]+1);
}
//2로만 나누어떨어지는 경우
else if( i%3 != 0 && i%2 ==0)
{
//2로 나눴을때 dp값,i-1일때 dp값 중 minimum
dp[i] = min(dp[i/2]+1, dp[i-1]+1);
}
//아예 안나눠떨어지는경우.
else {
dp[i] = dp[i-1]+1;
}
}
cout << dp[N] << endl;
}
반응형
'Algorithm > Problem Solve' 카테고리의 다른 글
[백준 1764번] 듣보잡(이분탐색, C++ / python) (0) | 2020.12.24 |
---|---|
[백준 1697번] 숨바꼭질 (BFS / C++ / Python) (0) | 2020.12.22 |
[백준 1074번] Z ( 분할정복, 재귀) ** 다시풀어보기** (0) | 2020.12.19 |
[백준 1012] 유기농 배추 ( BFS ) (0) | 2020.12.15 |
[백준 1003] 피보나치 함수 (DP문제) (0) | 2020.12.15 |