- DP를 사용해서 풀었습니다.
- top-down(recursive)가 아닌 bottom-up(loop) 방식을 사용했습니다.
아래 점화식 중에서 최소값을 찾으면됩니다.
dp[i] = dp[i/3]+1
dp[i] = dp[i/2]+1
dp[i] = dp[i-1]+1
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int dp[1000001] = {};
dp[1] = 0;
dp[2] = 1;
dp[3] = 1;
for (int i = 4; i <= n; i++)
{
int m = 100000000;
if (i % 3 == 0)
{
m = dp[i / 3];
}
if (i % 2 == 0)
{
m = min(m, dp[i / 2]);
}
m = min(m, dp[i - 1]);
dp[i] = m + 1;
}
cout << dp[n] << endl;
return 0;
}
참고
반응형
'미분류' 카테고리의 다른 글
| [백준 11727번] 2×n 타일링 2 (0) | 2020.02.11 |
|---|---|
| [백준 11726번] 2×n 타일링 (0) | 2020.02.11 |
| plugin 개발 관련 생각 (0) | 2020.02.05 |
| 네이버 영상 다운받기 ( ts파일 일괄 다운로드, 합치기 ) (0) | 2020.01.13 |
| 개발 잘하려면 측정이 잘되야 한다 (0) | 2020.01.10 |