문제 출처 : https://www.acmicpc.net/problem/10989
이번 문제는 평소에 알고있던 정렬과는 다른 정렬을 사용하였다.
문제를 읽고 시간 제한과 메모리 제한이 다른 문제와 다르다는 것을 알고 어떻게 해결하면 좋을지에 대한 생각을 했다.
해당 문제에서는 들어오는 테스트 케이스의 수는 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
|
'알고리즘' 카테고리의 다른 글
백준 1406번 문제 ( 에디터 ) (0) | 2019.12.25 |
---|---|
백준 10816번 문제 ( 숫자 카드 2 ) (0) | 2019.12.25 |
백준 11650번 문제 ( 좌표 정렬하기 ) (0) | 2019.12.25 |
백준 10815번 문제 ( 숫자 카드 ) (0) | 2019.12.24 |
백준 1920번 문제 ( 수 찾기 ) (0) | 2019.12.23 |