알고리즘

이것이 코딩테스트다 - 6) 정렬

dodop 2021. 1. 24. 18:17

 

 

 

 

 

 

6.1) 위에서 아래로

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

using namespace std;

bool compare(int a, int b) {
	return a > b;
}

int main() {


	int n;
	cin >> n; 
	 
	vector <int> arr;

	for (int i = 0; i < n; i++)
	{
		int m;
		cin >> m;
		arr.push_back(m);
	}

	sort(arr.begin(), arr.end(), compare);

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

	return 0;

}

 

 

6.2)성적이 낮은 성적로 학생 출력하기

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

using namespace std;
class Student {
public:
	string name;
	int score;
	Student(string name, int score) {
		this->name = name;
		this->score = score;
	}
	//낮은점수부터 오름차순으로 설정(연산자 오버로딩)
	bool operator < (Student& other) {
		return this->score < other.score;
	}
};

int n;
vector <Student> v; 

int main() {

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		string name;
		int score;
		cin >> name >> score;
		v.push_back(Student(name, score));

	}
	sort(v.begin(), v.end());
	for (int i = 0; i < n; i++)
	{
		cout << v[i].name << " ";
	}


	return 0;

}

 

 

 

6.3)두 배열의 원소 교체

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


using namespace std;

int n, k;
vector<int> A;
vector<int> B;

bool compare(int a, int b) {
	return a > b;
}

int main() {
	 
	cin >> n >> k;

	for (int i = 0; i < n; i++)
	{
		int m;
		cin >> m;
		A.push_back(m);
	}
	for (int i = 0; i < n; i++)
	{
		int m;
		cin >> m;
		B.push_back(m);
	}
	//A는 오름차순, B는 내림차순으로 정렬
	sort(A.begin(), A.end());
	sort(B.begin(), B.end(), compare);

	for (int i = 0; i < k; i++)
	{
		if (A[i] < B[i])
			swap(A[i], B[i]);
		else break;
	}


	//수의 합이 int의 범위를 넘어설 수 있으므로 sum은 long long 으로 지정한다. 
	long long sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum += A[i];
	}

	cout << sum << endl;


	return 0;



}

/*
 처음에 푼 방법(맞았다)
using namespace std;
int n, k,sum = 0;
vector<int> A;
vector<int> B;
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++)
	{
		int m;
		cin >> m;
		A.push_back(m);
	}
	for (int i = 0; i < n; i++)
	{
		int m;
		cin >> m;
		B.push_back(m);
	}
	while (k > 0)
	{
		sort(A.begin(), A.end());
		sort(B.begin(), B.end());
		int tmp;
		tmp = A[0];
		A[0] = B[n - 1];
		B[n - 1] = tmp;
		k--;
	}
	for (int i = 0; i < n; i++)
	{
		sum += A[i];
	}
	cout << sum << endl;
	return 0;
}
*/