sort를 활용한 가장 큰 정수 구하기 Javascript

cptkuk91·2022년 8월 24일
1

Algorithm

목록 보기
77/161

문제

정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 합니다.

주의사항

  • 입력으로 주어진 배열은 중첩되지 않은 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) {
  // TODO: 여기에 코드를 작성합니다.
  let result = 0;

  if(arr.includes(0)){
    return 0;
  }

  for(let i = 0; i < arr.length; i++){
    for(let j = 1; j < arr.length; j++){
      for(let k = 2; k < arr.length; k++){
        result = Math.max(arr[i] * arr[j] * arr[k]);
      }
    }
  }

  return result;
};

문제점

위와 같이 코드를 입력하면 풀 수 있다고 생각했지만, 문제는 arr[i] 부터 발생하기 시작한다. 하나씩 사용해야하는 숫자값을 여러번 사용하는 문제가 발생한다.

largestProductOfThree([7,5,7]);
VM519:13 7 5 7
VM519:14 result 245
VM519:13 7 7 7
VM519:14 result 343
VM519:13 5 5 7
VM519:14 result 175
VM519:13 5 7 7
VM519:14 result 245
VM519:13 7 5 7
VM519:14 result 245
VM519:13 7 7 7
VM519:14 result 343
343

풀이

const largestProductOfThree = function (arr) {
  // TODO: 여기에 코드를 작성합니다.
  let sorted = arr.sort((a, b) => a - b);
  const len = sorted.length;

  let case1 = sorted[len - 1] * sorted[len - 2] * sorted[len - 3];
  let case2 = sorted[0] * sorted[1] * sorted[len - 1];

  return Math.max(case1, case2);
};

생각보다 쉽게 풀 수 있는 문제입니다.
sort를 활용할 경우, 음수부터 양수까지 작은수부터 큰수로 나열하게 됩니다.
만약 음수가 2개 이상일 경우, 음수 * 음수를 통해 큰 값을 얻어낼 수 있습니다.
따라서 case2번을 활용해 가장 큰 값을 뽑아낼 수 있었습니다.

반대로 음수가 1개 밖에 없을 경우, 가장 큰 수는 sort된 배열에서 가장 마지막에 위치한 3개의 수입니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글