minSumEachTwoIntProduct.js (7kyu 75)

Codewars 알고리즘 풀이


Problem

  • Find the minimum sum which is obtained from summing each two integers product.
    • 각 두 정수의 곱을 합해서 얻은 최소 합계를 반환한다.
  • Array will contain positive only and has even size.
    • 배열은 양수만 포함하고, 항상 짝수 크기이다.


For example:

minSumEachTwoIntProduct([5, 4, 2, 3]);  // 22 (5 * 2 + 3 * 4)


Solution 01

function minSumEachTwoIntProduct(arr) {
  let sortArr = arr.sort((a, b) => a - b);
  let sum = 0;
  
  while (sortArr.length) {
    sum += sortArr.pop() * sortArr.shift();
  }
  
  return sum;
}

minSumEachTwoIntProduct([5, 4, 2, 3]);  // 22 (5 * 2 + 4 * 3)
minSumEachTwoIntProduct([2, 4, 1, 3]);  // 10 (4 * 1 + 3 * 2)

sort(): 배열의 element를 정렬한 후, 그 배열을 반환한다.

pop(): 배열의 마지막 element를 제거하고, 그 element를 반환한다.

shift(): 배열의 첫 번째 element를 제거하고, 그 element를 반환한다.


Solution 02

function minSumEachTwoIntProduct(arr) {
  let sortArr = arr.sort((a, b) => a - b);
  let sum = 0;
  
  for (let i = 0, j = arr.length - 1; i < arr.length / 2; i++, j--) {
    sum += sortArr[i] * sortArr[j];
  }
  
  return sum;
}

minSumEachTwoIntProduct([5, 4, 2, 3]);  // 22 (5 * 2 + 4 * 3)
minSumEachTwoIntProduct([2, 4, 1, 3]);  // 10 (4 * 1 + 3 * 2)