[BaekJoon]2751번: 수 정렬하기2
❓문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
✏️입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
📜출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
💻코드
/*
[백준 2750] 수 정렬하기
22-08-02 / c++
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
*/
/*
[백준 2751] 수 정렬하기2
22-08-02 / c++
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
시간복잡도가 O(nlogn)인 정렬 사용하기
*/
#include<iostream>
#include<algorithm>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false);
int SIZE;
cin >> SIZE;
int* arr = new int[SIZE];
for (int i = 0; i < SIZE; i++)
{
cin >> arr[i];
}
sort(arr, arr + SIZE);
for (int i = 0; i < SIZE; i++)
{
cout << arr[i] <<"\n";
}
return 0;
}
-
C++의 sort함수가 워낙 강력하기 때문에 쉽게 풀 수 있었다.
-
시간을 줄이기 위해
endl
대신\n
을 사용했는데, 버퍼를 비우는 endl은 상대적으로 시간이 걸리기 때문이다. -
또한,
ios_base::sync_with_stdio(false);
를 작성해줬는데, 이로 인해 C의 stdio와 C++의 iostream을 동기화를 비활성화 시켜 두 가지의 버퍼를 사용할때 생기는 딜레이를 줄일 수 있고 따라서 시간을 줄일 수 있다. -
그대신, thread-safe가 깨지면서 안정성이 떨어지게 된다. 원래는 IO의 순서가 예상한 것과 일치하게 되는데, 동기화를 비활성화 한다면
cin
과scanf
를 동시에 사용할 때, 출력 순서를 보장할 수 없게 된다.