문제
링크
풀이
#include <stdio.h>
int main(void) {
int n;
int dp[1000001][2]; // 0: count, 1: prev
for (int i=0; i<=1000000; i++) {
dp[i][0] = 0;
dp[i][1] = 0;
}
scanf("%d", &n);
for (int i=2; i<=n; i++) {
dp[i][0] = dp[i-1][0] + 1;
dp[i][1] = i-1;
if (i%2 == 0 && dp[i][0] > dp[i/2][0] + 1) {
dp[i][0] = dp[i/2][0] + 1;
dp[i][1] = i/2;
}
if (i%3 == 0 && dp[i][0] > dp[i/3][0] + 1) {
dp[i][0] = dp[i/3][0] + 1;
dp[i][1] = i/3;
}
}
printf("%d\n%d", dp[n][0], n);
for (int i=n; i!=1; i=dp[i][1])
printf(" %d", dp[i][1]);
return 0;
}