본문 바로가기

Programming/데일리 알고리즘

(210519:BTB) Lesson 6. MaxProductOfThree

발생가능한 배열의 케이스는 총 3가지이고, 각각에 대하여  3가지 곱의 최댓값을 뽑는 방법은 아래와 같다. 

 

(오름차순으로 정렬되었다는 전제이다.)

 

1. 양수, 음수가 섞인 경우 

   -  [-3, -2, 1, 2, 3] : 0~1번 인덱스의 숫자의 곱이 2~3번 인덱스의 숫자의 곱보다 크면, (0, 1, 4)번 인덱스 값의 곱이 답이다. 

   -  [-3, -2, 4, 5, 6] : 0~1번 인덱스의 숫자의 곱이 2~3번 인덱스의 숫자의 곱보다 작으면,  2~4번 인덱스의 숫자의 곱이 답이다. 

2. 모두 양수일 경우 

   - [1, 2, 3, 4, 5] : 2~4번 인덱스의 숫자의 곱이 답이다. 

3. 모두 음수일 경우 

   - [-5, -4, -3, -2, -1] : 2~4번 인덱스의 숫자의 곱이 답이다. 

 

즉, 

양수, 음수가 섞인 배열 중 0~1번 인덱스의 숫자의 곱이 last index-1, last index-2의 곱보다 크면 (0, 1, last index) 곱을 반환하고, 

그 외에는 모두 (last index-2, last index-1, last index)의 곱을 반환하면 된다.

 

function solution(A) {
  const array = A.slice();

  const sortedArray = array.sort((a, b) => a - b);
  const lastIndex = sortedArray.length - 1;

  // 음수, 양수가 섞어있을 경우
  if (sortedArray[0] < 0 && sortedArray[1] < 0 && sortedArray[lastIndex] > 0) {
    const compareValue = sortedArray[0] * sortedArray[1];
    const value = sortedArray[lastIndex - 1] * sortedArray[lastIndex - 2];
    if (compareValue > value) {
      return compareValue * sortedArray[lastIndex];
    }
  }

  return (
    sortedArray[lastIndex] *
    sortedArray[lastIndex - 1] *
    sortedArray[lastIndex - 2]
  );
}