쉬운거라 별생각 안했는데 이거 맞지 않나???
https://www.acmicpc.net/problem/12852
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int dp[1000001];
int main()
{
cin>>N;
dp[1]=0;
for(int i=2; 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]<<endl;
while(N>0)
{
cout<<N<<" ";
if(N==1)
break;
if(dp[N]==dp[N-1]+1)
N-=1;
else if(dp[N]==dp[N/2]+1)
N/=2;
else if(dp[N]==dp[N/3]+1)
N/=3;
}
}
5555넣으면 5553 2776나오는데 둘 사이 관계없어서 틀림
내코드는 5555 5554 2777 2776 순인데 님꺼는 5555 5554 5553 2776인거봐서는 단순히 값만 비교해서 -1부터 그리디하게 출력하면 틀리는듯