2020.코딩일지

[JS][코플릿]Immersive Toy Problem-08_largestProductOfThree 본문

algorithm

[JS][코플릿]Immersive Toy Problem-08_largestProductOfThree

개발하는라푼젤 2022. 8. 25. 08:52
728x90

 

문제

정수를 요소로 갖는 배열을 입력받아 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)

 

 

👻하

 

 

킹규명님의 풀이

배열에서 3개의 숫자를 곱했을 때 나오는 가장 큰 수를 찾자.

const largestProductOfThree = function (arr) {
	// 숫자를 오름차순으로 정렬한다.
	// 이 문제를 푸는데 핵심이다!
  const sorted = arr.sort((a, b) => a - b);

	// arr.length를 많이 사용하기에 len에 할당해서 코드를 줄였다.
  const len = arr.length;

	// 오름차순으로 정렬했기에 맨 뒤 3자리 수는 가장 큰 수이다.
  const candi1 = sorted[len - 1] * sorted[len - 2] * sorted[len - 3];

	// 마이너스 숫자도 정렬되었기에 첫 번째 숫자와 두 번째 숫자는
	// 가장 낮은 값이다.
	// 플러스와 마이너스를 먼저 곱해 마이너스 부호가 유지되게하고
	// 다음 마이너스 숫자와 곱해 부호를 플러스로 바꿔준다.
  const candi2 = sorted[len - 1] * sorted[0] * sorted[1];

	// 만들어진 두 개의 값을 비교해 가장 큰 값을 return 한다!
  return Math.max(candi1, candi2);
};

자바스크립트는 파이썬과 달리 인덱스-1(제일끝자리)이 없다.

그래서 [arr.length -1]로 끝자리를 찾아줘야한다.  [총길이의 -1]은 제일 끝자리!

 

마이너스숫자도 끝건 제일 앞[0],[1]에 있을테니까 곱해서

 

Mat.max(비교한다)


Math 객체

Math 객체는 수학에서 자주 사용하는 상수와 함수들을 미리 구현해 놓은 자바스크립트 표준 내장 객체

심지어 같은 자바스크립트 인터프리터라도 운영체제가 다르면 다른 결괏값을 반환할 수 있습니다.

따라서 아주 정확한 결괏값이 필요한 작업에는 Math 메소드는 사용하지 않는 것이 좋습니다.ㅋㅋㅋ

1. Math.min()

2. Math.max()

3. Math.random()

4. Math.round()

5. Math.floor()

6. Math.ceil()

7. Math.sin()

Comments