문제 출처 : https://www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

이번 문제는 평소에 알고있던 정렬과는 다른 정렬을 사용하였다. 

문제를 읽고 시간 제한과 메모리 제한이 다른 문제와 다르다는 것을 알고 어떻게 해결하면 좋을지에 대한 생각을 했다.

해당 문제에서는 들어오는 테스트 케이스의 수는 10,000,000개 인데 수는 10,000 이하의 수였다.

그래서 배열을 만개 정도만 잡고 카운트 형식으로 풀어보았는데 이것이 계수 정렬 ( Counting Sort ) 이라는 것을

배우게 되었다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
#pragma warning(disable:4996)
int arr[10001];
int main()
{
    int N;
    int num;
    int count;
    scanf("%d"&N);
    for (int i = 0; i < N; i++)
    {
        scanf("%d"&num);
        arr[num]++;
    }
    for (int i = 1; i <= 10000; i++)
    {
        if (arr[i] == 0)
            continue;
        else
        {
            count = arr[i];
            for (int j = 0; j < count; j++)
                printf("%d\n", i);
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

블로그 이미지

뀨심볼

깃허브 주소는 : https://github.com/hhyc2 입니다~

,