← Back to List

12852번: 1로 만들기 2 ↗

Solutions

C++14
439 B | 439 chars
#include <iostream>
#define Mx 999999999
using namespace std;
int N,ar[4400000],check[4400000],array;
int main()
{
	cin>>N;
	for(int x=2; x<=N; x++) ar[x]=Mx;
	for(int x=1; x<=N; x++)
	{
		if(ar[x*3]>ar[x]+1)ar[x*3]=ar[x]+1,check[x*3]=x;
		if(ar[x*2]>ar[x]+1)ar[x*2]=ar[x]+1,check[x*2]=x;
		if(ar[x+1]>ar[x]+1)ar[x+1]=ar[x]+1,check[x+1]=x;
	}
	cout<<ar[N]<<endl;
	array=N;
	while(array!=0)
	{
		cout<<array<<" ";
		array=check[array];
	}
}