목차
코드
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(int a, int b){
return a > b;
}
int main() {
int arr[100];
int n, i = 0;
cin >> n;
for(; n > 0; i++){
arr[i] = n % 10;
n /= 10;
}
sort(arr, arr + i, compare);
for(int j=0; j<i; j++){
cout << arr[j];
}
return 0;
}
사견
그동안 오름차순으로 정렬했던 것을 내림차순으로 정렬하는 문제이다.
솔직히, 고민 안하고 문제 풀려면... 그냥 sort default로 정렬 해 주고, 역순으로 출력하면 되긴 한다.
하지만 공부를 하는 입장에서는 default인 오름차순으로 정렬하는 것 보다는 사용자가 조건을 지정하여 정렬하는 법을 알 필요가있다.
C++ sort() 사용법
sort(정렬할 대상의 정렬시작 부분, 정렬할 대상의 정렬 끝 부분, 정렬 조건)
여기서 3번째 parameter를 공백으로 둘 경우에는 기본적으로 오름차순 정렬이 된다.
그렇다면 어떻게 조건을 줘야 내림차순이 되는가?
bool compare(int a, int b){
return a > b;
}
이 문제같은 경우에는 int형 배열이 정렬대상으로 들어가는데
정렬의 경우 두 수를 비교하게 된다.
먼저 들어가는 수가 int a 라고 가정,
그 다음 들어가는 수가 inb b 라고 가정시.
a > b 가 true로 return 되면
먼저 들어간 수가 뒤의 수보다 클 때 True 이므로 내림차순으로 정렬이된다.
반대로 오름차순으로 정렬한다면
return a < b 로 하면 된다.
compare 함수를 만들때 정렬 대상에 따라 parameter의 type도 신경을 써야하며, 조건에도 신경을 써 주면
2차원 벡터를 사용해서 2중조건으로 정렬을 할 수있다.
이 부분에 대해서는 다음 문제에서 Vector Container를 같이 알아보며 해 보도록 하겠다.
'공부 > 백준' 카테고리의 다른 글
1181번: 단어 정렬(백준 C++) (0) | 2020.11.02 |
---|---|
11650번: 좌표 정렬하기(백준 C++) (0) | 2020.11.01 |
2108번: 통계학(백준 C++) (0) | 2020.10.30 |
10989번: 수 정렬하기3(백준 C++) (0) | 2020.10.29 |
2751번: 수 정렬하기2(백준 C++) (0) | 2020.10.28 |