Doby's Lab

백준 2992번: 크면서 작은 수 (C++) 본문

PS/BOJ

백준 2992번: 크면서 작은 수 (C++)

도비(Doby) 2022. 4. 13. 22:48

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

 

2992번: 크면서 작은 수

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

www.acmicpc.net


Solved By: Back Tracking, String to Int (stoi)

 

가능한 경우의 수를 찾기 위해 백트래킹을 사용하였습니다. 문자열 비교가 되지 않길래 stoi 함수를 통해 정수형으로 변환하여 compare 하여 문제에서 요구하는 s보다 크면서 제일 작은 수를 찾을 수 있었습니다.

#include <iostream>
#include <string>
using namespace std;

string s;
int ans = 1000000;
bool visited[7];

void backTracking(string temp, int cnt){
    if(cnt == s.size()){
        if(temp > s){
            int tempInt = stoi(temp);
            ans = tempInt < ans ? tempInt : ans;
        }
        return;
    }
    
    for(int i = 0; i < s.size(); i++){
        if(!visited[i]){
            visited[i] = true;
            backTracking(temp + s[i], cnt + 1);
            visited[i] = false;
        }
    }
}

int main(){
    cin >> s;
    backTracking("", 0);
    
    if(ans == 1000000) cout << 0;
    else cout << ans;
    return 0;
}
728x90

'PS > BOJ' 카테고리의 다른 글

백준 6850번: Cows (C++)  (0) 2022.04.17
백준 10903번: Wall construction (C++)  (0) 2022.04.16
백준 1940번: 주몽 (C++)  (0) 2022.04.11
백준 2191번: 들쥐의 탈출 (C++)  (0) 2022.03.19
백준 2188번: 축사 배정 (C++)  (0) 2022.03.19