BOJ/정렬

[C/C++] 백준 - 15688번 : 수 정렬하기 5

JWonK 2021. 7. 31. 13:32
728x90
반응형

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

 

15688번: 수 정렬하기 5

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

www.acmicpc.net

이 문제는 C++을 사용한다면 Algorithm 헤더 파일에 존재하는 sort함수를 쓰면 되는 문제이지만, 주의할점이

ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

main함수 맨 앞에 이 3줄의 코드를 적어주어야한다.

 

첫 번째 줄의 코드는 C언어와 C++의 동기화를 끊어줌으로써 사용하는 버퍼의 수를 줄여 실행속도를 향상시켜주는 것이다. 단, 위 3줄의 코드를 사용할 경우 C의 printf / scanf 사용은 하면 안된다

 

두번째, 세번째 코드는 

cin과 cout는 stream 버퍼를 공유한다. 이를 tie한다고 표현하며 tie가 되어있는 경우 입출력 요청을 받게 되면 실행 전에

stream의 버퍼를 확인하고 flush를 하게 된다. 하지만, 이 2줄의 코드를 작성하게 되면 tie과정이 생략되고, 바로 입출력이 되어 실행속도가 빨라진다.

 

마지막으로, 줄바꿈을 할 때 C++에서는 endl을 사용할 수 있지만 '\n'을 통해 줄바꿈을 하는 것이 속도면에서 훨씬 빠르다. 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#define INF 987654321
using namespace std;

// BOJ :: https://www.acmicpc.net/problem/10836

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	vector<int> v;
	int n; cin >> n;
	for (int i = 0; i < n; i++) {
		int data; cin >> data;
		v.push_back(data);
	}

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

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << '\n';
	}

	return 0;
}
728x90
반응형