🔻 최댓값 만들기 (2)
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
입출력 예
numbers result [1, 2, -3, 4, -5] 15 [0, -31, 24, 10, 1, 9] 240 [10, 20, 30, 5, 5, 20, 5] 600
👀
처음 문제를 풀 때 배열의 마지막 값에 접근하기 위해 numbers[-1]로 접근하였는데 접근이 안 되는 것을 확인했다. 따라서 배열의 길이를 통해서 접근을 해야 하나 고민하던 중, numbers.at(-1)을 통해 접근할 수 있음을 알았다.
function solution(numbers) {
// 내림차순으로 정리
numbers.sort((a,b) => b-a);
let max1 = numbers[0] * numbers[1];
// 만약 음수값으로 최대값이 있을 경우 대비
let max2 = numbers.at(-1) * numbers.at(-2);
// max2가 음수라면 max1을 return 하도록
return max2 < 0 ? max1 : Math.max(max1, max2);
}
at() 메서드는 정수 값을 받아, 배열에서 해당 값에 해당하는 인덱스의 요소를 반환한다. 양수와 음수 모두 지정할 수 있고, 음수 값의 경우 배열의 뒤에서부터 인덱스를 센다.
대괄호 표기법을 사용한다면 맨 마지막 요소를 가져오고 싶을 때 length 속성을 사용해 array[array.length - 1]을 사용해야 하는 반면, 짧게 array.at(-1)을 사용하여 나타낼 수 있다.
let arr1 = [1,2,3,4,5];
console.log(arr1.at(-1)); // 5
function solution(numbers) {
// 내림차순으로 정리
numbers.sort((a,b) => b-a);
let max1 = numbers[0] * numbers[1];
// 만약 음수값으로 최대값이 있을 경우 대비
let max2 = numbers.at(-1) * numbers.at(-2);
// 굳이 삼항 연산자를 안 써도 됐다!
return Math.max(max1, max2);