View

반응형

 

알고리즘 분류: 정렬

문제 링크: https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

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

www.acmicpc.net

 

 

【 문제 】

 

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

 

 

【 입력 】

 

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

 

 

【 출력 】

 

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

 

 

【 풀이 】

 

2750번: 수 정렬하기 문제와 유사하다.

https://baehoon.tistory.com/9

 

[백준] 2750번: 수 정렬하기 [C/C++]

알고리즘 분류: 구현, 정렬 문제 링크: https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값

baehoon.tistory.com

풀이 또한 거의 비슷하다.

C++의 STL인 sort 함수를 이용하여 풀면 간단히 해결할 수 있다.

그러나 2750번과의 차이점은 바로 N의 범위에 있다.

2750번은 1,000까지의 범위를 허용했지만, 이 문제는 1,000,000까지로 비교적 넓은 범위이다.

따라서 2750번과 똑같이 제출한다면 시간 초과가 발생하게 된다.

 

풀이방법은 메모리 초과를 방지해 동적 할당을 하고

개행으로 'endl'이 아닌 '\n'을 사용하는 것이다.

'endl'은 개행도 해주지만, 이외에 버퍼 flush연산도 같이 수행하는데

이는 빠른 연산도 아니고 수십만 번씩 누적되면 시간제한을 넘기게 될 수 있다.

그래서 단순 개행이 목적이라면 '\n'을 출력하는 것이 조금이라도 시간 이득을 볼 수 있다.

 

 

【 C++ 소스 코드 】

 

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

int main(void)
{
	int n;
	cin >> n;
    
	int* arr = new int[n];
    
	for (int i = 0; i < n; i++)
		cin >> arr[i];
        
	sort(arr, arr + n);
    
	for (int i = 0; i < n; i++)
		cout << arr[i] <<"\n";
        
    delete[]arr;
	return 0;
}

 

 

 

728x90
반응형
Share Link
reply
250x250
반응형
«   2024/07   »
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 27
28 29 30 31