첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다.
첫째 줄에 S의 최솟값을 출력한다**
그리디로 푸는 문제
두 배열을 입력 받고
a배열은 오름차순
b배열은 내림 차순으로 정렬한다.
그후 num에 a[i] * b[i]로 곱해준다.
문제에서는 b 배열은 그대로 두라 했지만 이렇게 b 배열을 움직여도 풀린다.
b배열을 움직이지 않고 풀려면 a배열만 정렬 check배열 설정
b배열의 제일 큰 값을 a에 곱하여 정답 변수에 넣고
사용한 b 배열은 check에 표시하여 다시 사용하지 않는
방법도 있다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
vector<int> a(n, 0);
vector<int> b(n, 0);
vector<int> sum(n, 0);
int min = 0;
int num = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cin >> b[i];
}
sort(a.begin(),a.end());
sort(b.begin(), b.end(),greater<>());
for (int i = 0; i < n; i++)
{
num += a[i] * b[i];
}
cout << num<<"\n";
}