[프로그래머스] 최댓값 만들기 (2) - Java

Yunki Kim·2023년 1월 6일
0

프로그래머스

목록 보기
79/101
post-thumbnail

문제


링크


코드

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()를 통해 배열을 정렬하게 되면 배열에서 숫자는 오름차순으로 정렬되므로 제일 작은 수가 왼쪽 제일 큰 수가 오른쪽에 위치하게된다.
그렇다면 제일 우측에 있는 끝부분의 인덱스와 한 칸 왼쪽에 있는 인덱스의 값을 곱하면 최댓값이라 생각할 수 있다.

하지만, 음수가 포함되어 있으므로 한가지 더 생각해봐야한다.
음수의 입장에서는 배열의 왼쪽에 있는 값이 가장 절대값이 크고
양수의 입장에서는 배열의 오른쪽에 있는 값이 가장 절대값이 크다.

그러므로 배열의 첫번째 인덱스와 두번째 인덱스를 곱한 값과 마지막 인덱스와 그 한 칸 왼쪽의 인덱스를 곱한 수 중 큰 수가 최댓값이다.

뭔가 설명이 장황해져서 제대로 전달됬는지는 모르겠다 🥲

0개의 댓글