본문 바로가기
알고리즘/백준

알고리즘(C++) / 백준 2751 : 수 정렬하기 2

by clean_h 2021. 4. 10.
728x90

2751

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개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

코드

//2751 수 정렬하기 2
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

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

	int N, num;
	cin >> N;

	vector <int> vec;

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

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

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

	return 0;
}

 

설명

N개의 수를 입력받아 오름차순으로 정렬한다.

정렬하는 함수는 #include <algorithm> 함수에서 sort함수를 사용한다.

sort함수로 오름차순으로 정렬하여 출력한다. 

 

하지만, 이번 문제에서 시간제한이 있어 시간을 줄이는게 관건이다.

cin과 cout은 scanf와 printf보다 시간이 오래걸린다.

cin과 cout의 시간을 줄이기 위해서

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

다음과 같은 코드를 추가하면 시간을 줄일 수 있다.

더 자세한 설명은

2021.04.10 - [알고리즘] - 알고리즘(C++) / cin, cout 입출력 속도 높이기

에서 하겠다.

 

결과

 

고찰

기본적은 문제를 풀기위해서 풀었지만 시간초과로 인하여 풀지 못하였다.

기본적인 코드 습관이 cin과 cout을 사용을 많이하고 endl을 사용하는데 이 습관을 고쳐 printf와 scanf로 사용하거나

시간을 단축하는 코드를 작성하여 문제를 풀어야 할거같다. 

 

난이도

◐○

 

728x90

댓글