본문 바로가기

알고리즘/BOJ

1174번

1174번 - 줄어드는 숫자


우선 줄어드는 숫자 중에서 가장 큰 수는 9876542310 이 된다.


그리고 이 숫자는 길이가 10자리 이기 때문에 재귀함수에서의 depth 를 11로 놓고 재귀를 이용해서 풀었다.


앞의 숫자부터 채워가면서, 그 다음수는 작아지게 재귀함수를 이용해서 짰다.


만족하는 모든 수를 vector 에 저장하고, 나중에 sort 를 이용해서 오름차순으로 정렬한다.


그 뒤에 N번째 수, vector 배열에서는 N-1 번째 수를 출력한다,


만약 존재하지 않는 값이면 -1을 출력하도록 vector 의 크기를 이용해서 설정한다.


<정답 코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
 
void go(long long a,int depth, vector<long long> &v)
{
    if (depth > 10)
    {
        return;
    }
 
    v.push_back(a);
 
    int x = a % 10;
 
    for (int i = x - 1; i >= 0; i--)
    {
        go(a*10+i, depth + 1, v);
    }
}
int main()
{
    int n;
    scanf("%d"&n);
    vector<long long> v;
 
 
    for (int i = 0; i <= 9; i++)
    {
        go(i, 0, v);
    }
 
    sort(v.begin(), v.end());
 
    if (v.size() < n)
    {
        printf("-1\n");
        return 0;
    }
 
    printf("%lld\n", v[n-1]);
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

1417번  (0) 2018.01.16
2573번  (0) 2018.01.14
1398번  (0) 2018.01.14
3980번  (0) 2018.01.14
1614번  (0) 2018.01.14