https://www.acmicpc.net/problem/1026
입력으로 숫자들을 받아 그 숫자들의 순서를 조정하여 곱한 값을 가장 작게 만드는 문제이다.
문제 태그를 보고 최대한 잡생각 없이 간결하게 풀려고 해보았다.
간단히 생각해보면 두 수를 서로 곱할때 가장 큰것 * 가장 작은것 이런식으로 매칭을 해줄때 가장 작은 경우가 된다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n;
int sum = 0;
cin >> n;
vector<int> v1(n), v2(n);
for (int i = 0; i < n; i++){
cin >> v1[i];
}
for (int i = 0; i < n; ++i){
cin >> v2[i];
}
sort(v1.begin(), v1.end());
sort(v2.rbegin(), v2.rend());
for (int i = 0; i < n; ++i){
sum += v1[i] * v2[i];
}
cout << sum;
}
따라서 첫줄 숫자를 받은 배열과 두번째줄 숫자를 받은 배열의 정렬 순서를 반대로 해서 곱해주면 해결된다.