[토이8]
largestProductOfThree
문제
정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다.
입력
인자 1 : arr
number 타입을 요소로 갖는 임의의 배열
출력
number 타입을 리턴해야 합니다.
주의사항
입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.
배열의 요소는 음수와 0을 포함하는 정수입니다.
배열의 길이는 3 이상입니다.
// 요소가 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);
};
// 헐... 너무 간단해서 화가난다...
// 하핫... 이게 알고리즘이구나 ㅎㅎㅎ 나의 두시간이여... 하핫... 슬프게 잠들듯... 울면서자야지...ㅋ...ㅋ