곱셈은 큰수끼리 곱할 때 더욱 커지는 성질을 가지고 있습니다. 따라서 (A의 원소) * (B의 원소)를 구할 때 가장 작은 수끼리 곱한다면 당장의 그 곱셈의 결과는 최솟값이 되겠지만 남은 원소들을 곱해서 나온 값이 너무 커서 최종적으로 합했을 때 최솟값이 되지 않을 것입니다.
따라서 “(A의 원소) * (B의 원소)”의 합을 최솟값으로 만들고자 한다면 A의 원소에서 최솟값은 B의 원소에서 최댓값과 곱하고 B의 원소에서 최솟값은 A의 원소에서 최댓값과 곱해야 합니다.
위와 같은 연산을 쉽게 하기 위해서는 A와 B를 각각 오름차순, 내림차순으로 정렬하고 같은 index를 서로 곱하면 될 것입니다.
func solution(_ A:[Int], _ B:[Int]) -> Int {
var ans = 0
// 서로 반대의 기준으로 정렬
let sortedA = A.sorted(by: <)
let sortedB = B.sorted(by: >)
let count = A.count
for i in 0..<count {
ans += sortedA[i] * sortedB[i]
}
return ans
}