설명
- 정수를 요소를 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다.
예시
let output = largestProductOfThree([2, 1, 3, 7]);
console.log(output);
output = largestProductOfThree([-1, 2, -5, 7]);
console.log(output);
생각
- 우선 오름차순으로 정렬하자.
- 음수가 있는 경우와 아닌 경우를 생각해보자
- 음수가 있다면 뒤에 음수 2개를 곱하면 양수가 되고, 거기에 배열의 맨 끝을 곱하면 된다.
- 음수가 없다면 맨 끝 3개 요소를 곱하면 된다.
풀이
const largestProductOfThree = function (arr) {
const sorted = arr.slice().sort((a,b) => a-b)
const count1 = sorted[sorted.length-1]*sorted[sorted.length-2]*sorted[sorted.length-3]
const count2 = sorted[0]*sorted[1]*sorted[sorted.length-1]
return Math.max(count1,count2)
깨달은 점
- 음수가 포함된 정렬방식을 처음 알게 됐다. 이번 문제를 풀면서 꼭 가져가야할 공식이다.
- 음수가 포함된 경우와 그렇지 않은 경우를 분리해야 했는데 이 때 3개 요소를 곱해야하기 때문에 음수가 2개를 곱했다면 가장 큰 양수를 곱해야하고, 음수가 없다면 맨 끝 3개를 곱한다는 생각을 하는게 매우 중요했다. 비록 생각해냈지 못해서 레퍼런스를 참고했지만 비슷한 문제를 풀 때 이 문제를 기억해야겠다.