🌴 문제
정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다.
🌴 출력
number 타입을 리턴해야 합니다.
🌴 주의사항
- 입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.
- 배열의 요소는 음수와 0을 포함하는 정수입니다.
- 배열의 길이는 3 이상입니다.
🌴 입출력 예시
let output = largestProductOfThree([2, 1, 3, 7]);
console.log(output); // --> 42 (= 2 * 3 * 7)
output = largestProductOfThree([-1, 2, -5, 7]);
console.log(output); // --> 35 (= -1 * -5 * 7)
output = largestProductOfThree([-5, -4, -3, -1, 999, 10000]);
console.log(output); // 200000
output = largestProductOfThree([-5, -4, -3, -2, -1]);
console.log(output); // -6
🌴 문제 풀이
const largestProductOfThree = function (arr) {
// 정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴
let arrMax = [];
for(let i=0; i<arr.length; i++){
for(let j=1; j<arr.length; j++){
for(let n=2; n<arr.length; n++){
if(i !== j && i !== n && j !== n){
arrMax.push(largest = arr[i] * arr[j] * arr[n]);
}
}
}
}
return Math.max(...arrMax);
};
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); // 둘 중 가장 큰 수 찾기
};
주어진 배열을 작은 숫자부터 순서대로 나열한 후에 배열을 보면 뒤에 세 숫자를 곱하는게 가장 큰 숫자이다. 하지만 음수가 있을 경우 두개의 음수를 곱하면 양수가 되기 때문에 음수 중 가장 큰 숫자가 있는 배열의 0번째와 1번째를 가장 큰 수와 곱한 값과 비교해서 가장 큰 수를 반환한다.
단순히 반복문을 사용해서 풀기보다는 문제를 자세하게 바라보는 연습을 해야겠다!!
'알고리즘' 카테고리의 다른 글
binarySearch (0) | 2022.07.12 |
---|---|
fibonacci (0) | 2022.06.24 |
compressString (0) | 2022.06.22 |
decryptCaesarCipher (0) | 2022.06.21 |
numberSearch (0) | 2022.06.20 |