[백준 1463번 C/C++] 1로 만들기

 

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net


 

해결전략

 

동적계획법 (Dynamic Programming) DP

 

dp[1] = 0


 

코드

 

#include<iostream>
#include<vector>
using namespace std;

int main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(NULL);
	int n;
	cin >> n;
	vector<int> dp(n+1);

	dp[1] = 0;
	dp[2] = 1;
	dp[3] = 1;

	for (int i = 4; i <= n; i++) {
		dp[i] = dp[i - 1] + 1;

		if (i % 2 == 0) 
			dp[i]=min(dp[i], dp[i / 2] + 1);

		if (i % 3 == 0)
			dp[i]=min(dp[i], dp[i / 3] + 1);
	}

	cout << dp[n];

	return 0;
}