구현
- 주어진 문제의 조건을 잘 이해하고, 일치하는 답을 반환하는 문제이다.
문제 상황 + 로직
- 문제에서는 두 개의 길이가 같은 배열이 주어진다.
- 그리고 두 배열 각각 요소를 하나씩 뽑아서 곱한다. 그리고 그 다음 각각 요소를 뽑아 곱하여 이전에 곱했던 값과 합한다. 이 과정을 각 배열 모든 요소에 대해 진행한다.
- 그리고 이 곱한 값들의 누적합을 최소로 만들어야한다.
- 이를 만족하기 위해서, 두 배열을 각각 A, B라고 한다면 A는 오름차순으로 정렬하고 B는 내림차순으로 정렬한다.
- 그 이유는 두 배열 모두 같은 기준으로 정렬이 되어있으면, 뒤로 갈수록 큰 값과 큰 값이 곱해져 매우 큰 값이 나올 수 있기 때문에 균형을 맞춰주기 위함이다.
- 한쪽은 작은 값에서 큰 값으로 증가, 그리고 다른 한 쪽은 큰 값에서 작은 값으로 감소하면 두 배열 요소의 곱을 서로 차례대로 곱한 값은 최대한 작아진다.
코드
function solution(A,B){
A.sort((a, b) => a - b)
B.sort((a, b) => b - a)
let sum = 0
for(let i = 0; i < A.length; i++) {
sum = sum + A[i] * B[i]
}
return sum
}