주어진 정수 요소를 갖는 배열에서 임의의 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 ,양수