프로그래머스 (JS)/Lv. 0

[Programmers] 120862번 - 최댓값 만들기(2)

hodo- 2023. 3. 2. 21:18

Problem

문제 보기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.


Solution

function solution(numbers) {
    const x = numbers.sort((a, b) => a - b);
    const a = x[0] * x[1];
    const b = x[numbers.length - 1] * x[numbers.length - 2]
    return a > b ? a : b
}

이 문제에서 중요한 것은 음수 * 음수는 정렬에서 가장 작은 값이지만 곱하면 가장 큰 수일수도 있다는 것이다.

그렇기에 sort()로 오름차순으로 정렬해주면 음수가 맨 앞으로 오므로 음수의 첫번째와 두번째를 곱한 값과 양수의 가장 큰 값과 그 다음으로 큰 값을 곱한 값을 비교해준다.

function solution(numbers) {
    numbers.sort((a, b) => a - b);
    return Math.max(numbers[0]*numbers[1], numbers[numbers.length-1]*numbers[numbers.length-2]);
}

다른 사람 코드에서 나랑 같은 방식으로 풀었지만 Math.max()를 이용하여 간략하게 푼 것을 발견하였다.