• toc {:toc}

๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

  1. sort ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์ด sort ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„  greater<>() ๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค. ๋ณธ๋ž˜ <> ์•ˆ์— ์ž๋ฃŒํ˜•์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•˜๋‚˜, C++14 ๋ถ€ํ„ฐ๋Š” ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. Quick Sort ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ’€์ด

  • Quick sort ๊ณผ์ •.
    • pivot ์„ ์žก๋Š”๋‹ค. (์‹œ์ž‘, ์ค‘๊ฐ„, ๋ ๋“ฑ ๋งŽ์€ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๋‚˜๋Š” ์‹œ์ž‘๊ฐ’์œผ๋กœ ์žก์•˜๋‹ค.)
    • left = i ๋Š” ๋งจ ์™ผ์ชฝ, right = j ๋Š” ๋งจ ์˜ค๋ฅธ์ชฝ์—์„œ ์ถœ๋ฐœํ•œ๋‹ค.
    • left ์˜ ๊ฒฝ์šฐ pivot ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ฐพ๋Š”๋‹ค.
    • right ์˜ ๊ฒฝ์šฐ pivot ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ฐพ๋Š”๋‹ค.
    • ๋งŒ์•ฝ left ์™€ right ๊ฐ€ ์„œ๋กœ ์—‡๊ฐˆ๋ฆฐ ๊ฒฝ์šฐ pivot ๊ณผ right ๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด pivot ์˜ ์™ผ์ชฝ์—๋Š” pivot ๋ณด๋‹ค ํฐ ๊ฐ’๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค.
    • ์—‡๊ฐˆ๋ฆฌ์ง€ ์•Š๊ณ  left ์™€ right ๊ฐ€ ๊ฒฐ์ •๋œ ๊ฒฝ์šฐ ๋‘ ๊ฐ’์„ ๋ฐ”๊ฟ”์ค€๋‹ค.
#include <bits/stdc++.h>
using namespace std;
 
int num[11];
 
void quick_sort(int *data, int start, int end){
    if(start >= end){
        // ์›์†Œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ
        return; 
    }
    
    int pivot = start;
    int i = pivot + 1; // ์™ผ์ชฝ ์ถœ๋ฐœ ์ง€์  
    int j = end; // ์˜ค๋ฅธ์ชฝ ์ถœ๋ฐœ ์ง€์ 
    int temp;
    
    while(i <= j){
        // ํฌ์ธํ„ฐ๊ฐ€ ์—‡๊ฐˆ๋ฆด๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while(i <= end && data[i] >= data[pivot]){
            i++;
        }
        while(j > start && data[j] <= data[pivot]){
            j--;
        }
        
        if(i > j){
            // ์—‡๊ฐˆ๋ฆผ
            temp = data[j];
            data[j] = data[pivot];
            data[pivot] = temp;
        }else{
            // i๋ฒˆ์งธ์™€ j๋ฒˆ์งธ๋ฅผ ์Šค์™‘
            temp = data[i];
            data[i] = data[j];
            data[j] = temp;
        }
    } 
    
    // ๋ถ„ํ•  ๊ณ„์‚ฐ
    quick_sort(data, start, j - 1);
    quick_sort(data, j + 1, end);
}
 
// quick sort ๊ตฌํ˜„ํ•ด์„œ ํ’€์ด
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
 
    int N, idx = 0, k;
    cin >> N;
    while(true){
        k = N % 10;
        num[idx++] = k;
        N = N/10;
        if(N == 0) break;
    }
 
    quick_sort(num, 0, idx-1);
 
    for(int i = 0; i<idx; i++){
        cout << num[i];
    }
 
    return 0;
}
 
// sort ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ด
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
 
    string N;
    cin >> N;
    sort(N.begin(), N.end(), greater<>());
    cout << N << '\n';
 
    return 0;
}