공부/백준

1427번: 소트인사이드(백준 C++)

상연 2020. 10. 31. 16:13

목차

    1427번: 소트인사이드 링크

    코드

    #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를 같이 알아보며 해 보도록 하겠다.