largestProductOfThree [부트캠프 알고리즘 21]

hyo·2022년 8월 22일
0

코딩테스트 준비

목록 보기
1/8
post-thumbnail

알고리즘 21. largestProductOfThree

문제 : 정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴하라.

입력 : 인자1 -> arr -> number 타입을 요소로 갖는 임의의 배열

출력: number타입을 리턴해야 함.

주의사항 : 입력으로 주어진 배열은 중첩되지 않은 1차원 배열이다.
배열의요소는 음수와 0을 포함하는 정수이다.
배열의 길이는 3이상이다.

입출력 예시 ->

largestProductOfThree([2,1,3,7]);
-> 42(= 2 * 3 * 7)
largestProductOfThree([-1,2,-5,7]);
-> 35(= -1 * -5 * 7)

의사코드

// sort() 메서드를 활용해서 배열안의 숫자를 정렬
// 정렬된 배열의 요소중 음수는 가장 앞으로 양수는 뒤로 오게됐을때,
// 가장 뒤의 양수 3개를 곱한값과 가장뒤의 양수1개와 가장 앞의 음수 2개를 곱한값을 비교하여 리턴하면 가장 큰 수가 리턴!

sort() 메서드

구글링하여 sort()메서드에 대해서 알아보니 구현방식에 따라 정렬이 다르게 나오는걸 알 수 있다.

arr.sort([compareFunction])

-> mdn sort()

const largestProductOfThree = function (arr) {
  const newArr = [...arr]; // sort()함수는 원본을 바꾸기 때문에 미리 복사해둔다.
  const sorted = newArr.sort((a,b) => a - b); // 왜 이렇게 썻는지 sort(compareFunction)을 잘 이해해보면 알수있다. 
  const leng = sorted.length; // 코드의 가독성과 간결함을 위해 미리 sorted.length를 하나의 변수로 선언해둔다.
  const sum1 = sorted[leng - 1] * sorted[leng - 2] * sorted[leng - 3]; // 비교값1 = sum1 변수에 에 배열의 가장 뒤의 3개의 숫자를 곱한 값을 선언해준다.
  const sum2 = sorted[leng - 1] * sorted[0] * sorted[1]; // 음수는 '짝수' 개를 곱했을때 양수이므로 가장앞의 2개의 숫자와 양의정수중 가장 큰수인 가장 뒤의 숫자 1개를 곱한값을 sum2변수에 할당 선언해준다.
  return Math.max(sum1, sum2); // Math.max(비교값) 메서드를 사용하여 sum1,sum2중 더 큰 수를 리턴해준다.
} 
 

->

const largestProductOfThree = function (arr) {
  const newArr = [...arr];
  const sorted = newArr.sort((a,b) => a - b);  
  const leng = sorted.length; 
  const sum1 = sorted[leng - 1] * sorted[leng - 2] * sorted[leng - 3]; 
  const sum2 = sorted[leng - 1] * sorted[0] * sorted[1]; 
  return Math.max(sum1, sum2); 

-> sort() 메서드의 이해만 안다면 쉽게 풀수 있는 문제였다.

profile
개발 재밌다

0개의 댓글