Koala - 6기/기초 알고리즘 스터디

[백준/c++] 11931번: 수 정렬하기 4

hoeunwang 2022. 4. 3. 21:01

 

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

 

11931번: 수 정렬하기 4

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net


문제 해석


숫자 배열을 입력받은 후 내림차순으로 정리 하여 출력해주는 문제이다.


코드


#include <iostream>
#include <algorithm>
using namespace std;
int a[100000];
 int n;
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, a + n, greater<int>());
    for (int i = 0; i < n; i++)
        cout << a[i] << '\n';
}

문제 풀이


보통 sort 함수를 사용하면, 기본적으로 오름차순으로 정렬된다. 그치만 이 11931번 문제 같은 경우는 내림차순으로 정렬해줘야 한다. 그럴 경우엔 큰 숫자 들부터 나열해줘서 return 값으로 반환 해주는 boolean 함수를 하나 생성하여 sort 함수 안에 선언하여 준다. 예를들어서 비교해줄 두 수 를 a와 b로 받아오고 return a>b; 로 큰 수 부터 나열 되게끔 반환하여 준다. 그런 후 main 함수 안에 sort를 선언 할때 (배열.first(), 배열.end(), 만든boolean 함수) 이런식으로 선언하여 준 후 for 문 으로 배열을 하나씩 출력하여 주면 내림차순으로 정렬 후 출력할 수 있다.
하지만, c++에서 내림차순으로 정렬해주는 함수를 따로 만들지 않아도 내림차순으로 정렬해주는 함수가 있는데, 바로 greater<자료형>함수 이다. 이 함수를 사용해 주면 좀 더 간단하게 문제를 해결 할 수 있다.