문제
정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다.
입력
인자 1 : arr
number 타입을 요소로 갖는 임의의 배열출력
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)
const largestProductOfThree = function (arr) {
const sorted = arr.slice().sort((a, b) => a - b);
// 배열을 오름차순으로 정렬해 새로운 변수에 담아준다
const len = arr.length;
// 배열의 길이를 len 변수에 담아준다
const candi1 = sorted[len - 1] * sorted[len - 2] * sorted[len - 3];
// 배열의 길이는 최소 3개 이상이므로, 뒤에서부터 3개의 요소를 먼저 곱해준다 (가장 큰 세 개의 숫자를 곱함)
const candi2 = sorted[len - 1] * sorted[0] * sorted[1];
// 앞에서부터 2개와 마지막 요소를 곱해준다 (음수이면 두 개를 곱해서 양수로 만들어주려고)
return Math.max(candi1, candi2);
// 두 가지 후보 중 큰 쪽을 리턴한다.
};
섹션 3에 들어가게 되면서 데일리코딩도 새롭게 들어가게 되었는데, 섹션 2 데일리코딩도 나에게는 쉽지 않았는데...확실히 섹션 3 데일리코딩은 어떻게 접근해야하는지, 수도 코드 작성마저 쉽지 않다..레퍼런스를 보면서 이해해보자..!
📍
sort
: sort() 라는 메소드를 가지고 이 메소드는 리스트를 정렬된 상태로 변경한다.
📍sorted()
: sorted() 라는 내장 함수는 이터러블 객체로부터 정렬된 리스트를 생성한다.
📍slice()
: slice() 메서드는 어떤 배열의 begin부터 end까지에 대한 얕은 복사본을 새로운 배열 객체로 반환하며,원본 배열은 바뀌지 않는다.
📍Math.max()
: Math.max()함수는 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환한다.