잡다한 시도/코테 준비는 하는거니?

[BOJ] 2750번: 수 정렬하기

GGOBOOGI 2019. 10. 13. 21:12
반응형

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

1차 시도- 맞았습니다

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

int compare(const void* a,const void *b)
{
    int num1 = *(int *)a;
    int num2 = *(int *)b;

    if(num1<num2)
        return -1;
    if(num1>num2)
        return 1;
    return 0;
}

int main()
{
    int n;
    cin >> n;
    int num[n];

    for (int i = 0;i<n;i++)
        cin >> num[i];
    
    qsort(num, n, sizeof(int), compare);

    for (int i = 0; i < n;i++)
        cout << num[i] << '\n';
}

qsort 함수를 쓰고 싶었는데, qsort함수에 들어갈 인자와 compare함수를 어떻게 작성하는지 몰라서 헤멨다.

https://dojang.io/mod/page/view.php?id=638 여기를 보고 해결했다.

 

간단히 말하자면, qsort(정렬할 배열, 요소 개수, 요소 크기, 비교 함수)를 넣어야 하고

비교 함수의 형식(?)은 <notnull> compare(const void*, const void*)로 정해져 있기에 compare함수 안에서 void 포인터를 int 포인터로 변환하는 과정이 필요하다.  포인터도 형변환이 되는 줄은 몰랐음.

 

오름차순 정렬 조건으로, a < b 일 때는 -1을 반환, a > b 일 때는 1을 반환,  a == b 일 때는 0을 반환하면 된다.

내림차순 정렬 조건을 쓰고 싶으면 a < b일때 1을 반환하면 된다.

반응형