๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1038๋ฒˆ - ๊ฐ์†Œํ•˜๋Š” ์ˆ˜

by dkswnkk 2022. 9. 27.

๋ฌธ์ œ

 

1038๋ฒˆ: ๊ฐ์†Œํ•˜๋Š” ์ˆ˜

์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ X์˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ํฐ ์ž๋ฆฟ์ˆ˜๋ถ€ํ„ฐ ์ž‘์€ ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๊ฐ์†Œํ•œ๋‹ค๋ฉด, ๊ทธ ์ˆ˜๋ฅผ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 321๊ณผ 950์€ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์ง€๋งŒ, 322์™€ 958์€ ์•„๋‹ˆ๋‹ค. N๋ฒˆ์งธ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std;


vector<ll> v;

void backtracking(string s){
    if(s > "9876543210") return;
    string temp = s;
    reverse(temp.begin(), temp.end());
    v.push_back(stoll(temp));
    for(int i=s.back() - '0' + 1; i<=9; i++){
        string num = to_string(i);
        backtracking(s + num);
    }
    
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n; cin>>n;
    for(int i=0; i<=9; i++){
        string num = to_string(i);
        backtracking(num);
    }
    sort(v.begin(), v.end());
    
    if(n>=v.size()) cout<<-1;
    else cout<<v[n];
}

 

ํ’€์ด

  1. 0, 01, 012, 0123...., 0123456789, 012345679, 01234568, 012345689 ... ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ backtracking์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  2. ์œ„ number๋ฅผ ๊ฑฐ๊พธ๋กœ ์ฆ‰ ์—ญ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๊ฐ€ ๋˜๊ธฐ์— reverse ์‹œ์ผœ์„œ vector์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ€์žฅ ํฐ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋Š” 9876543210 ์œผ๋กœ int๊ฐ’์„ ๋„˜๊ธฐ ๋•Œ๋ฌธ์— long long์œผ๋กœ vector๋ฅผ ์„ ์–ธํ•ด์ค๋‹ˆ๋‹ค.
  4. ๋งˆ์ง€๋ง‰์— ์ •๋ ฌ ํ›„ ์ฐพ๊ณ ์ž ํ•˜๋Š” N์„ V[N]์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด v[0] = 0, .... v[1022] = 9876543210์ด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€