2751: 수 정렬하기2

2022. 5. 5. 12:01C언어/백준

-Class2 : Silver5

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

 

2751번: 수 정렬하기 2

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

www.acmicpc.net

 

-결과

 

-코드

#include <stdio.h>
#include <stdlib.h>

int num[1000000];
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;
    scanf("%d", &n);
    for (int a = 0; a < n; a++)
    {
        scanf("%d", &num[a]);
    }
    qsort(num, n, sizeof(int), compare);
    for (int i = 0; i < n; i++)
    {
        printf("%d\n", num[i]);
    }
    return 0;
}

 

-풀이

이 문제는 대략 2~3달 전에 자바로 시도했다가 틀린 문제다. 시간 초과로 틀려서 어떻게 수정해야 하는지 감이 잘 안 잡혔었는데 이번에 c로 풀면서 어떻게 풀어야 되는 건지 알게 되었다.

일단 이전에 풀었을 때와 마찬가지로 정렬을 이용해서 푸는 문제이다.

그리고 그 중에서도 퀵정렬을 쓰는 게 가장 좋다.

늘 코드를 작성할 때는 범위를 잘 확인해야 한다. 이 문제는 수의 개수를 최대 1,000,000이라고 했으므로 num[ 1,000,000]으로 맞춰준다.

compare 함수를 이용해서 num1값이 num2값보다 크면 1을 출력하도록 한다. (작으면 -1을 출력)

그리고 main 함수에서 수를 n번 입력받고, qsort함수를 이용해서 정렬을 하고 출력한다.

 

*qsort함수에 대한 설명

참고: https://dojang.io/mod/page/view.php?id=638 

 

C 언어 코딩 도장: 73.2 퀵 정렬 함수 사용하기

이번에는 퀵 정렬 함수를 사용해보겠습니다. 퀵 정렬 함수에는 정렬할 배열 또는 메모리의 주소, 요소 개수, 요소 크기, 비교 함수를 넣어줍니다(stdlib.h 헤더 파일에 선언되어 있습니다). qsort(정

dojang.io

 

 

'C언어 > 백준' 카테고리의 다른 글

7568: 덩치  (0) 2022.05.09
17478: 재귀함수가 뭔가요?  (0) 2022.05.05
2609: 최대공약수와 최소공배수  (0) 2022.05.05
1436: 영화감독 숌  (0) 2022.05.01
1181: 단어 정렬  (0) 2022.05.01