ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이것이 코딩테스트다 - 6) 정렬
    알고리즘 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;
    }
    */

     

Designed by Tistory.