import java.util.Arrays;
class Solution {
public int solution(int[] numbers) {
Arrays.sort(numbers);
int res1 = numbers[0] * numbers[1];
int res2 = numbers[numbers.length - 1] * numbers[numbers.length - 2];
return res1 > res2 ? res1 : res2;
}
}
순차적으로 배열을 돌며 수를 곱하여 확인하는 방법도있지만 그러면 반복횟수가 증가하게 된다.
절대값의 특성을 이용하면 적은 반복횟수로 결과를 도출할 수 있다.
Arrays.sort()
를 통해 배열을 정렬하게 되면 배열에서 숫자는 오름차순으로 정렬되므로 제일 작은 수가 왼쪽 제일 큰 수가 오른쪽에 위치하게된다.
그렇다면 제일 우측에 있는 끝부분의 인덱스와 한 칸 왼쪽에 있는 인덱스의 값을 곱하면 최댓값이라 생각할 수 있다.
하지만, 음수가 포함되어 있으므로 한가지 더 생각해봐야한다.
음수의 입장에서는 배열의 왼쪽에 있는 값이 가장 절대값이 크고
양수의 입장에서는 배열의 오른쪽에 있는 값이 가장 절대값이 크다.
그러므로 배열의 첫번째 인덱스와 두번째 인덱스를 곱한 값과 마지막 인덱스와 그 한 칸 왼쪽의 인덱스를 곱한 수 중 큰 수가 최댓값이다.
뭔가 설명이 장황해져서 제대로 전달됬는지는 모르겠다 🥲