알고리즘 문제 해결/BOJ

[백 트래킹] BOJ 1038 감소하는 수

jmkimmessi 2022. 1. 18. 00:00
반응형

https://www.acmicpc.net/problem/1038

 

1038번: 감소하는 수

음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를

www.acmicpc.net

 

문제 해결 알고리즘

 

string으로 숫자를 입력 받아 앞자리 수와 비교 한 후에 long long으로 배열에 입력해 백트래킹이 끝나면 배열을 정렬해 그에 해당하는 감소하는 숫자를 출력한다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int N;
vector<long long> v;

void dfs(string str){
    
    if(str != "") {
        long long n = stoll(str);
        v.push_back(n);
    }
    
    
    for(int i=0;i<10;i++){
        string num = to_string(i);
    
        if(i > str[0]-'0') dfs(num+str);
        
    }
    
}


int main(){
    cin >> N;
    
    dfs("");
    
    sort(v.begin(),v.end());
    
    if(N >= v.size()) cout << -1;
    else cout << v[N];
}

 

반응형

'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글

[BFS] BOJ 6593 상범 빌딩  (0) 2022.01.24
[BFS] BOJ 2589 보물섬  (0) 2022.01.21
[분할 정복] BOJ 17829 222-풀링  (0) 2022.01.15
[그리디] BOJ 16496 큰 수 만들기  (0) 2022.01.12
[BFS] BOJ 17267 상남자  (0) 2022.01.08