[코딜리티] MaxProductOfThree (JavaScript)

dosanahnchangho·2020년 8월 28일
0

문제 출처

문제 요약

배열에서 임의 수 3개 수 곱의 최대 값을 구하는 문제

문제 풀이

function solution(A) {
  const maxN = Math.max(...A);
  const maxI = A.indexOf(maxN);
  const newA = [...A.slice(0, maxI), ...A.slice(maxI + 1)];

  let maxV = A[0] * A[1] * A[2];
  newA.forEach((n, i) => {
    for (let j = i + 1; j < newA.length; j++) {
      const newMax = maxN * n * newA[j];
      maxV = newMax > maxV ? newMax : maxV;
    }
  });
  return maxV;
}

곱이니 최대 값이 무조건 포함될 거라는 가정으로 최대 값을 구한 후 나머지 배열을 가지고 루프를 돌려 봤자 퍼포먼스 에서 실패

function solution(A) {
  const normalA = A.sort((a, b) => b - a).slice();
  const absA = A.sort((a, b) => Math.abs(b) - Math.abs(a)).slice();

  const normalAResult = normalA[0] * normalA[1] * normalA[2];
  const absAResult = absA[0] * absA[1] * absA[2];

  return Math.max(normalAResult, absAResult);
}

문제 챕터가 sort인걸 보고 겨우 정렬할 생각을 했다.

원소에 음수가 포함된 배열이라서 정확도와 성능이 떨어짐

function solution(A) {
  A.sort((a, b) => b - a);
  let maxV = A[0] * A[1] * A[2];
  let maxV2 = A[0] * A[A.length - 1] * A[A.length - 2];

  return Math.max(maxV, maxV2);
}

숫자 3개의 곱의 최대값이 되는 경우의 수는

양수 * 양수 * 양수 와

양수 * 음수 * 음수 2가지 경우의 수밖에 없다.

결론

알고 나면 너무 쉬운 문제..

profile
프론트 엔드 개발자

0개의 댓글