PS/정렬 알고리즘[Sort]

백준 10989 수 정렬하기 3(c++)

SeungbeomKim 2022. 7. 7. 20:59

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

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

<코드>

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

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin>>n;
	vector<int>count(10001);
	
	for(int i=0;i<n;i++)
	{
		int num;
		cin>>num;
		count[num-1]++;
	}
	for(int i=0;i<=10000;i++)
	{
	
		for(int j=0;j<count[i];j++)
		{
			cout<<i+1<<'\n';
		}
	}
}

<풀이과정>

이 문제는 다른 정렬 문제랑은 다르게 시간복잡도를 고려하는 것이 아닌, 메모리를 고려해야 한다.

될수 있는 n의 최댓값이 10000000인데, 배열의 메모리를 10000000만큼 할당한다면 메모리 초과가 뜰 수 밖에 없다.

그래서 카운팅 정렬이란 것을 적용시켜야 된다.

될 수 있는 수는 10000까지이므로 같은 값이 나온다면 그 개수를 늘려주는 것이 카운팅 정렬이다.

'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글

백준 1374 강의실(c++)  (1) 2022.07.11
백준 5635 생일(c++)  (0) 2022.07.07
백준 2075 N번째 큰 수  (1) 2022.07.07
백준 10867 중복 빼고 정렬하기(c++)  (0) 2022.07.06
백준 10814 나이순 정렬(c++)  (0) 2022.07.06