201223 - 알고리즘

jungeundelilahLEE·2020년 12월 22일
0

Daily Algorithm

목록 보기
9/19

[토이8]

largestProductOfThree

문제
정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다.

입력
인자 1 : arr
number 타입을 요소로 갖는 임의의 배열

출력
number 타입을 리턴해야 합니다.
주의사항
입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.
배열의 요소는 음수와 0을 포함하는 정수입니다.
배열의 길이는 3 이상입니다.


시도한 방법 : err

// 요소가 3개면
  // 그냥 다 곱해
// 요소가 4개 이상이면
  // 음수가 1개면 : 음수를 제외한다
  // 음수가 짝수개면 : 음수에서 -를 제외하고 (음수를 양수로 변경하고) 크기를 비교한다
  // 음수가 1개를 제외한 홀수개면 : 음수 중 가장 작은 2개를 추출한 후, 그 2개만 -를 제외하고 크기를 비교한다


const largestProductOfThree = function (arr) {
  
  if (arr.length === 3) {
    return arr.reduce((pre, value) => pre*value)
  } 
  else if (arr.length >= 4) {
    let leng = arr.filter((el) => el < 0) // 음수 구해서 > 배열로 반환
    if (leng.length === 1) { // 1개면
      delete el // 해당 요소 삭제 후
      // return arr.reduce((pre, value) => pre*value) // 나머지 곱해주면 안되는구나...
      // 크기비교해야하는구나...
      // el을 오름차순으로 정리한 다음에 length-1 -2 -3요소들 추출하면 안되남.. 
      // => 안되고

      // 이런방법이 있음!!
      // var numArray = [140000, 104, 99, -1, 0, -33];
      // numArray.sort(function(a, b) {
      //   return a - b;
      // });
      // console.log(numArray); // [-33, -1, 0, 99, 104, 140000]
      let sortedArr = arr.sort(function(a,b) {
        return a-b;
      })
      return sortedArr[sortedArr.length-1]*sortedArr[sortedArr.length-2]*sortedArr[sortedArr.length-3]
    } else if (leng.length % 2 === 0) { // 짝수개면
      // a>0 ? -Math.abs(a) : Math.abs(a)
      // leng의 요소들을 반복으로 돌려
      let result = []
      for (let el of leng) {
        if (el < 0) {
          
        }
      }
      // result 는 음수들만담긴배열
      
      let sortedArr = result.sort(function(a,b) {
        return a-b;
      }) // result를 오름차순으로 정렬
      sortedArr.concat()

      return sortedArr[sortedArr.length-1]*sortedArr[sortedArr.length-2]*sortedArr[sortedArr.length-3]
    } else if (leng.length % 2 === 1 && leng.length !== 1) { // 1개를 제외한 홀수개면
      // 
    } 
  }
  

};

// 중도에 포기했지만 졌잘싸...
// 새로운 것들을 많이 알아냄!

// filter
// reduce
// a = 3
// a>0 ? -Math.abs(a) : Math.abs(a); // 양수면 마이너스로 음수면 플러스로

정답

const largestProductOfThree = function (arr) {
  const sorted = arr.slice().sort((a, b) => a - b);
  const len = arr.length;
  const candi1 = sorted[len - 1] * sorted[len - 2] * sorted[len - 3];
  const candi2 = sorted[len - 1] * sorted[0] * sorted[1];
  return Math.max(candi1, candi2);
};
// 헐... 너무 간단해서 화가난다...
// 하핫... 이게 알고리즘이구나 ㅎㅎㅎ 나의 두시간이여... 하핫... 슬프게 잠들듯... 울면서자야지...ㅋ...ㅋ
profile
delilah's journey

0개의 댓글