상세 컨텐츠

본문 제목

[백준/10989번/C언어] 수 정렬하기 3

알고리즘/C

by nownow 2022. 7. 3. 02:28

본문

계수정렬 Counting Sort 문제

https://soobarkbar.tistory.com/101

https://www.cs.miami.edu/home/burt/learning/Csc517.091/workbook/countingsort.html

작은 숫자가 입력될 때 사용할 수 있는 정렬방식.

입력할 숫자중 최대 크기로 배열을 선언.

입력된 숫자에 해당하는 숫자에 해당하는 순서의 인덱스를 ++.

10000이하의 숫자를 입력할  것이라면

x[10001] 선언 후

3을 입력하면 x[2]++

100을 입력하면 x[99]++

 

그 후 정렬부분은 이문제에선 필요없으니 생략.

뒷내용은 사진 캡션 링크

 

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1 

10
5
2
3
1
4
2
3
5
1
7

예제 출력 1 

1
1
2
2
3
3
4
5
5
7

 

#include<stdio.h>
int main()
{
	int num, num1;
	int x[10001] = { 0 };
	int tmp;
	scanf("%d", &num);
	for (int i = 0; i < num; i++)
	{
		scanf("%d", &num1);
		x[num1]++;
	}
	for (int i = 0; i <= 10000; i++)
	{
		while (x[i] != 0)
		{
			printf("%d\n", i);
			x[i]--;
		}
	}
}

※x[10000]으로 선언하고 i<10000 으로 했다가 틀림.

10000도 입력될 수 있으므로 x[10001]에 i<=10000으로 할것.