백준

백준 : 15688번 수 정렬하기5 (c++)

TIN9 2023. 9. 18.
반응형

백준 링크

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

 

15688번: 수 정렬하기 5

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이며, 같은 수가 여러 번 중복될 수도 있다.

www.acmicpc.net

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
10 초  128 MB 9359 4487 3367 49.874%

문제

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

길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이며, 같은 수가 여러 번 중복될 수도 있다.

출력

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

예제 입력 1 복사

5
5
4
3
2
1

예제 출력 1 복사

1
2
3
4
5

예제 입력 2 복사

5
1
2
1
2
1

예제 출력 2 복사

1
1
1
2
2

코드 풀이

기본적인 sort함수를 이용하여 정렬하면 되는문제이다.

하지만 그냥 sort함수만 사용하게되면 시간 초과가 나게 된다.

그래서 아래와 같은것을 적어야합니다.

ios::sync_with_stdio(false);
장점 : 동기화를 비활성화 시켜 입출력간의 성능이 향상 된다.
단점 : 동기화를 비활성화 시켰기 때문에 멀티쓰레드 환경에서 출력 순서를 보장할 수 없다.

cout.tie(NULL);
장점 : 입력과 출력을 병렬로 처리할 때 입출력 버퍼를 비우는 오버헤드를 줄일 수 있습니다
단점 : 출력이 지연될 수 있으며, 프로그램이 예상치 못한 시점에서 출력될 수 있습니다.

cin.tie(NULL);
장점 : 입력과 출력을 병렬로 처리할 때 입출력 버퍼를 비우는 오버헤드를 줄일 수 있습니다
단점 : 출력이 버퍼에 남아 있을 수 있으며, 이는 예상치 못한 결과를 초래할 수 있습니다.

위 코드들은 시간을 줄이는데 도움이 될 수 있지만 코테에 한해서만 사용하는것을 추천합니다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	int Count;

	cin >> Count;

	vector<int> vec;
	int Number = 0;

	for (int i = 0; i < Count; ++i)
	{
		cin >> Number;
		vec.push_back(Number);
	}

	sort(vec.begin(), vec.end());

	for (int i = 0; i < Count; ++i)
	{
		cout << vec[i] << '\n';
	}

}
반응형

댓글