주어진 정수 요소를 갖는 배열에서 임의의 3개의 수를 곱할때, 가장 큰 수를 찾기

입출력 예시

output = largestProductOfThree([-1, 2, -5, 7]);
console.log(output); // --> 35 (= -1 * -5 * 7)

내가 작성한 코드

const largestProductOfThree = function (arr) {
  // TODO: 여기에 코드를 작성합니다.
  if(arr.length === 3) return arr[0] * arr[1] * arr[2]; //길이가 3이면 곱 바로 리턴한다. 

  //일단정렬
  //마지막 값이 0보다 작다:다 음수라는 뜻
  //마자믹 값이 0이다: 0제외 다 음수: 0을 리턴.
  //마지막 값이 0보다 크다: 다 양수일수도 있고, 0과 음수 포함할수도 있다. [-2,-1,0,1,2,3,4]
  //양수만 가질경우- 
  //0과 양수 가질경우
  //음수 여러개, 0, 양수 가질경우
  //음수 여러개,  양수 가질경우
  arr.sort((a,b) => a-b);
  if(arr[arr.length - 1] < 0) return arr[arr.length - 1]*arr[arr.length - 2]*arr[arr.length - 3];
  if(arr[arr.length - 1] === 0) return 0;
  if(arr[arr.length - 1] > 0){
    //양수와 0만 가질때
    if(arr[0] >= 0) return arr[arr.length - 1]*arr[arr.length - 2]*arr[arr.length - 3];
    //음수 여러개, 양수 가질경우 
      //음수가 1개면: 위와 같음
      //음수가 2개 이상이면: 음수 2개 곱* 마지막요소 곱 vs 양수 3개 곱 비교. => 여기서 최대값 리턴

      //일단 음수의 개수를 센다.
      let count = 0;
      arr.forEach(el => {
        if(el < 0) count++;
      })
      if(count === 1) return arr[arr.length - 1]*arr[arr.length - 2]*arr[arr.length - 3];
      else{
        return Math.max(arr[0]*arr[1]*arr[arr.length - 1], arr[arr.length - 1]*arr[arr.length - 2]*arr[arr.length - 3])
      }
  }
};

문제를 제대로 읽지 않고 연속된 세개의 수의 곱을 구하려고했다- 슬라이딩윈도우를 쓰려고 해서, 미통과되었었음.

진짜 문제부터 제대로 읽어야한다.

레퍼런스도 내가 생각한 풀이방향과 비슷했기 때문에 , 다시볼것.

당황하면 아무것도 생각안나.

문제에 주어진 요소를 바꿔도 될거같으면 바꿔도된다.!

레퍼런스:

위의 코드를 리팩터한것과 동일함. 내용보면 공통적인 결과는 다 하나로 묶었다.

정렬하면 최소값이 맨앞에, 최대값이 맨 뒤에 온다

배열 요소가

모두 음수인 경우

음수,0

음수, 0 ,양수