코딩뚠뚠

[백준문제풀이] 2751 수 정렬하기 2 본문

알고리즘 문제풀이/백준문제풀이

[백준문제풀이] 2751 수 정렬하기 2

로디네로 2020. 12. 29. 01:15
반응형

 

풀이일시 : 2020-07-30

 

문제 :

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

 

입력 :

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

ex)

5

5

4

3

2

1

 

출력 :

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

ex)

1

2

3

4

5

 

풀이 :

수의 개수가 100만 이하라는 것에 주목하자.

-> O(N^2) 의 시간복잡도를 가지는 정렬 알고리즘을 사용하게되면 100만 * 100만 = 1조 까지 나올 수 있다. 하지만 시간제한이 1초이기 때문에 대략 이정도의 시간에는 1억 이내로 끝내야 한다.

-> 때문에 O(N*logN) 으로 해결해야 할 것이다. 퀵정렬을 이용하자.

-> but 퀵정렬도 최악의 경우에는 O(N^2)가 나오므로 보장할 수 없다.

-> o(N*logN)을 보장하는 stl 라이브러리 중 sort()함수를 사용하자

시간복잡도 O(N*logN)

 

#include <stdio.h>
#include <algorithm>

using namespace std;

int number, data1[1000000];

int main() {
	scanf("%d", &number);
	for (int i = 0; i < number; i++) {
		scanf("%d", &data1[i]);
	}
	sort(data1, data1 + number);
	for (int i = 0; i < number; i++) {
		printf("%d\n", data1[i]);
	}
	return 0;
}
​

 

반응형