본문 바로가기
코테/정렬

[C/C++] 나동빈 두 배열의 원소 교체, 정렬

by 상똥 2023. 3. 1.

문제

크기가 N으로 같은 두 배열 A, B가 있다. 이 두 배열의 원소를 서로 최대 K번 바꿀 수 있는데, 배열A의 원소이 총합이 최대가 되도록 원소를 교환한 후 그 총합을 출력하라. 
첫 번째 줄에 N과 K가 주어지고 두 번째 줄에 배열A의 원소가 주어지며 세 번째 줄에 배열 B의 원소가 입력된다.
(1≤N≤100,000, 0≤K≤N)

코드

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

int main() {
	int N, K, sum = 0, temp;
	cin >> N >> K;
	vector<int> A;
	vector<int> B;
	for (int i = 0; i < N; i++) {
		cin >> temp;
		A.push_back(temp);
	}
	for (int i = 0; i < N; i++) {
		cin >> temp;
		B.push_back(temp);
	}

	if (K == 0) {
		for (int i = 0; i < N; i++)
			sum += A[i];
		cout << sum;
		return 0;
	}
	else {
		sort(A.begin(), A.end());
		reverse(B.begin(), B.end());
		for (int i = 0; i < N; i++){
        	if (A[i] < B[i])
                A[i] = B[i];
            else
            	break;
        }
		for (int i = 0; i < N; i++)
			sum += A[i];
		cout << sum;
		return 0;
	}
}