나올 수 있는 가장 큰 값은 9876543210 (10자리) 이다.
1자리 수(0~9)부터 10자리 수에 대해서 각각 감소하는 수를 모두 구하면 된다.
n자리로 이루어진 모든 감소하는 수는 재귀로 구현했다.
유사한 문제
- 1038번: 감소하는 수#include <bits/stdc++.h> using namespace std; string num[10]={"0","1","2","3","4","5","6","7","8","9"}; void make(vector<string>& ret, string s, int d, int pos, int n){ if(pos >= n){ ret.push_back(s); return; } for(int i=0; i<d; ++i){ make(ret, s + num[i], i, pos+1, n); } } int main(){ int k, K; scanf("%d", &K); if(K > 1023) return puts("-1"), 0; vector<string> result; for(k=0; k<=K;){ // 1자리 ~ 10자리 for(int i=1; i<=10; ++i){ vector<string> v; make(v, "", 10, 0, i); for(int j=0; j<v.size(); ++j) result.push_back(v[j]); k += v.size(); } } puts(result[K-1].c_str()); return 0; }
댓글 없음:
댓글 쓰기