알고리즘 문제

[C/C++ 백준 2751번] 수 정렬하기 (Silver 5)

새파란 공대생 2020. 8. 10. 11:41

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

 

2751번: 수 정렬하기 2

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

www.acmicpc.net

algorithm 헤더파일에 존재하는 sort를 이용하면 바로 풀린다.

#include <cstdio>
#include <algorithm>
int Num[1000001];
using namespace std;
int main(void){
	int n;
	scanf("%d",&n);
	for(int i=0; i<n; i++)
		scanf("%d",&Num[i]);
	sort(Num, Num + n);
	for(int i=0; i<n; i++)
		printf("%d\n",Num[i]);
}

 

재밌는 건 직접 만든 quick sort를 이용해 풀면 시간 초과가 난다는 것이다. 저기있는 sort 알고리즘이 단순 quick sort뿐만 아니라 다양한 정렬의 하이브리드라 훨씬 더 적은 시간을 소모하는것 같다.

 

+다른 풀이

#include <cstdio>
int Num[2000001]={};
int main(void){
	int n, num;
	scanf("%d", &n);
	for(int i=0; i<n; i++){
		scanf("%d",&num);
		Num[num+1000000]++;
	}
	for(int i=0; i<2000001; i++){
		if(Num[i]!=0){
			for(int j=0; j<Num[i]; j++)
				printf("%d\n",i-1000000);
		}
	}
}