
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
| numbers | result |
|---|---|
| [1, 2, 3, 4, 5] | 20 |
| [0, 31, 24, 10, 1, 9] | 744 |
입출력 예 #1
두 수의 곱중 최댓값은 4 * 5 = 20 입니다.
입출력 예 #1
두 수의 곱중 최댓값은 31 * 24 = 744 입니다.
function solution(numbers) {
let answer, index = 0;
let max1 = Math.max(...numbers); // numbers 배열에서 가장 큰 수
for(let i = 0; i < numbers.length; i++)
if(numbers[i] === max1) index = i; // numbers 배열에서 가장 큰 수의 인덱스
Math.max(numbers.splice(index, 1)) // 인덱스에 해당하는 값을 삭제한 배열에서 가장 큰 수
answer = max1 * Math.max(...numbers);
return answer;
}
나는 왜 JS가 내장함수인 sort()가 없다 생각했을까.😦
순간 다른 언어와 헷갈린 거 같다. 그래서 sort()는 생각만 하고 이 문제에서 활용하지 못 했는데.
처음 배열에서 가장 큰 수(max1)와 그 수(max1)를 삭제한 배열에서의 가장 큰 수를 곱하는 방식으로 코드를 짰다.
splice()와 slice()의 차이점을 알아두는 게 좋을 거 같다.
-원본 배열을 변경하느냐 안 하느냐의 차이
https://velog.io/@gagaeun/JavaScript-slice-splice-split-%EC%B0%A8%EC%9D%B4
function solution(numbers) {
return numbers.sort((a,b)=>b-a).slice(0,2).reduce((a,b)=>a*b);
}
sort()함수의 오름차순은 numbers.sort((a,b)=>a-b)
내림차순은 위의 코드와 같이 numbers.sort((a,b)=>b-a)
slice() 함수로 0번째와 1번째 요소까지 자르고 이 두 개의 값을 reduce() 함수로 응축한다.
👉0번째 요소와 1번째 요소를 곱한다.
slice와 reduce를 사용하지 않은 코드가 더 간단할 수도 있다.
아래와 같이.
function solution(numbers) {
let [a, b] = numbers.sort((a,b) => b - a);
return a * b;
}