본문 바로가기
codes/daily coding

21_largestProductOfThree

by Mia_ 2022. 12. 21.

sort( ) 메서드

- 배열의 요소를 적절히 위치한 후 정렬한 후 그 배열을 반환

- 기본 정렬 순서는 문자열의 유니코드 포인트를 따른다

유니코드를 따라서 정렬 된 예제

## 구문
arr.sort([compareFunction])

compareFunction

: compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬 됨. a와 b가 비교되는 두 요소라면,

- compareFunction(a, b)이 0보다 작은 경우 → a를 b보다 낮은 색인으로 정렬 → 즉, a가 먼저 옴!

- compareFunction(a, b)이 0을 반환하면   a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬.

- compareFunction(a, b)이 0보다 큰 경우   b를 a보다 낮은 인덱스로 소트.

- compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개인 인수로 주어질 때 항상 동일한 값을  반환해야 함. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않음 

 

compare 함수의 형식

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

 

- 숫자를 비교하기 위해 compare 함수는 a에서 b를 뺄 수 있음

const largestProductOfThree = function (arr) {
  //Q. 정수를 요소로 갖는 배열을 입력 받아 3개의 요소를 곱해 나올 수 있는 최대값 리턴
  //주의! 배열 요소는 음수와 0을 포함!
  //largestProductOfThree([2, 1, 3, 7]); // --> 42 (= 2 * 3 * 7)

  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);
}

'codes > daily coding' 카테고리의 다른 글

24_isSubsetOf  (0) 2022.12.26
23_bubbleSort  (0) 2022.12.22
22_fibonacci  (0) 2022.12.20
19_decryptCaesarCipher  (0) 2022.12.11
18_numberSearch  (0) 2022.12.11