본문 바로가기

백준 문제풀이/String

[C++] 백준 문제풀이 (String) 2992번 크면서 작은 수

 

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

 

2992번: 크면서 작은 수

정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이

www.acmicpc.net

 

//[C++] 백준 문제풀이 (String)
#include <bits/stdc++.h>


std::string s;
std::vector<std::string> ret;
std::string str;
bool used[6];


void dfs(){
    if (str.length() == s.length()){
        if (str > s){
            ret.push_back(str);
        }
        return;
    }

    for (int i = 0; i < s.length(); ++i){
        if (used[i]) continue;
        used[i] = true;
        str += s[i];
        dfs();
        used[i] = false;
        str.pop_back();
    }
}

int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> s;
    dfs();

    if (ret.size() == 0){
        std::cout << 0 << "\n";
    }
    else {
        std::cout << *std::min_element(ret.begin(), ret.end()) << "\n";
    }
    return 0;
}