[정렬] 두 배열의 원소 교체

zzzzwso·2023년 7월 3일
0

algorithm

목록 보기
13/22

문제 설명

동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다. 동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 우너소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야 한다.

N,K 그리고 배열 A 와 B의 정보가 주어졌을 때, 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하시오.

입력 조건

첫 번째 줄에 N,K가 공백으로 구분되어 입력된다. (1<=N<=100,000, 0<=K<=N)
두 번째 줄에 배열 A의 원소들이 공백으로 구분되어 입력된다.
세 번째 줄에 배열 B의 원소들이 공백으로 구분되어 입력된다.

출력 조건

최대 k번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력한다.

c++ 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	int n, k;
	long long int answer = 0;
	cin >> n >> k;
	vector<int> v;
	vector<int> v2;
	for (int i = 0; i < n; i++)
	{
		int x;
		cin >> x;
		v.push_back(x);
	}
	for (int i = 0; i < n; i++)
	{
		int y;
		cin >> y;
		v2.push_back(y);
	}

	sort(v.begin(), v.end());
	sort(v2.rbegin(), v2.rend());
	for (int i = 0; i < k; i++)
		v[i] = v2[i];

	for (int i = 0; i < n; i++)
		answer += v[i];

	cout << answer;
}
profile
HI there

0개의 댓글