- toc {:toc}
ํ์ด
-
sort ํจ์๋ฅผ ์ด์ฉํ์ฌ ํ์ด sort ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด์ greater<>() ๋ฅผ ๋ฃ์ด์ค์ผ ํ๋ค. ๋ณธ๋ <> ์์ ์๋ฃํ์ ๋ช ์ํด์ค์ผ ํ๋, C++14 ๋ถํฐ๋ ๋ช ์ํด์ฃผ์ง ์์๋ ์ฌ์ฉํ ์ ์๋ค.
-
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;
}