백준 알고리즘 1463

이번 문제는 DP(Dynamic Programing)문제였다. 이전에 DP에 대한 이해를 하고 문제를 푼 적이 없어서 문제를 풀기 전에 간단하게 DP에 대해 알아보았다. 출처는 아래의 Blog이다.

2. Dynamic Programming (DP)

동적 프로그래밍의 기초

이제 DP에 대한 개념을 어느정도 알아 보았으니 관련된 문제를 풀어보았다.

#include <iostream>
#include <vector>

std::vector<int> dp_vector;
int X;
int result;

void output()
{
	std::cout << result;
}

void solution()
{
	dp_vector[1] = 0;
	for (int i = 2 ; i <= X ; i++)
	{
		dp_vector[i] = dp_vector[i - 1] + 1;
		if (i % 2 == 0)
			dp_vector[i] = std::min(dp_vector[i],dp_vector[i / 2] + 1);
		if (i % 3 == 0)
			dp_vector[i] = std::min(dp_vector[i],dp_vector[i / 3] + 1);
	}
	result = dp_vector[X];
}

void input()
{
	std::cin >> X;
	dp_vector.resize(X + 1);
}

void preset()
{
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout.tie(NULL);
}

int main()
{
	preset();
	input();
	solution();
	output();
}