
한 배열은 오름차순, 다른 배열은 내림차순 정렬 후 같은 인덱스끼리 곱합니다.
Arrays.sort(A); // 오름차순
Arrays.sort(B);
// B를 내림차순으로 (역순)
for (int i = 0; i < n; i++) {
answer += A[i] * B[n-1-i];
}
Why?
[1, 4, 2] × [5, 4, 4]A: [1, 2, 4] (오름차순)
B: [5, 4, 4] (내림차순)
1×5 + 2×4 + 4×4 = 29
반대로:
A: [1, 2, 4]
B: [4, 4, 5]
1×4 + 2×4 + 4×5 = 32 (더 큼!)
재배열 부등식 (Rearrangement Inequality)
| 목표 | 정렬 방법 |
|---|---|
| 곱의 합 최소화 | 역순 정렬 (A↑ × B↓) |
| 곱의 합 최대화 | 같은 순서 (A↑ × B↑) |
class Solution {
public int solution(int[] A, int[] B) {
Arrays.sort(A); // 오름차순
Arrays.sort(B); // 오름차순
int answer = 0;
for (int i = 0; i < A.length; i++) {
answer += A[i] * B[B.length - 1 - i]; // B는 역순으로
}
return answer;
}
}