# 백준 : 수 정렬하기(2750)

문제

https://www.acmicpc.net/problem/2750

소스

(Github: https://github.com/wonjnlee/wallydev/blob/master/bj_2750_Ascending)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

// For Descending
bool compare(int a, int b)
{
    return a > b;
}

int main(void) {
    // insert code here...
    int count, num;
    vector <int> arr;
    
    cin>>count;
    for(int i=0; i<count; i++) {
        cin>>num;
        arr.push_back(num);
    }
    
    // Ascending
    sort(arr.begin(), arr.end(), compare);
    
    // Descending
    sort(arr.begin(), arr.end(), compare);
    
    for(int i=0; i<count; i++) cout<<arr[i]<<endl;
    
    return 0;
}

풀이

솔직히 수 정렬하기 문제를 블로깅까지 해야하나 싶은데, 너무 오랜만에 알고리즘을 풀었더니 정렬하는 부분이 곧바로 나오지 않아서 되짚는 겸 올려본다. (이번 기회에 내용 하나 추가하고 싶은 것도 함정)
사실 알고리즘 대회에서 가장 많이 나온다고 자부할 수 있는게 정렬인데, 요즘 면접도 그렇고 이래저래 일이 좀 있다보니 너무 오랫동안 알고리즘에 손을 놓아버려서 기본기를 다시 되짚을 필요가 있다고 판단한다.
간단히 설명하면, vector에는 친절하게도 sort라는 '최적의 성능을 자랑하는 정렬 내장함수'가 포함되어 있다. 우리가 신경쓸 것은 오름차순으로 할것인지 내림차순으로 할것인지만 정하면 된다. 
sort는 기본적으로 오름차순을 수행하도록 되어있는데, compare(실제 특정 프로그래머들은 descending이라는 이름으로 사용하기도 한다)라고 이름을 칭한 저 함수를 이용하면 오름차순에서 내림차순으로 기능을 변환시킬 수 있다. 물론 '매우 간단하게'.

댓글