[Daily Coding]_largestProductOfThree

fejigu·2022년 8월 21일
1

알고리즘 & 자료구조

목록 보기
21/23


문제

정수를 요소로 갖는 배열을 입력받아 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개 이상의 숫자 중 가장 큰 숫자를 반환한다.

profile
신규 서비스의 기획부터 개발, 운영까지 전 과정을 경험한 주니어 📱

0개의 댓글