#include <string> #include <vector> #include <iostream> using namespace std; int d[1000002]; int pre[1000002]; int N; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> N; d[1] = 0; pre[1] = 0; for(int i=2;i<=N;i++) { d[i]=d[i-1]+1; pre[i] = i-1; if(i%3 == 0 and d[i/3]+1 < d[i]) { d[i] = d[i/3]+1; pre[i] = i/3; } if(i%2 == 0 and d[i/2]+1 < d[i]) { d[i] = d[i/2]+1; pre[i] = i/2; } } cout << d[N]<<'\n'; while(true){ cout << N <<' '; N = pre[N]; if(N == 0) break; } return 0; }
- DP에서 값을 추적하기 위한 방법
:pre[]배열을 사용해서 순회!