프로그래머스 최댓값 만들기 (2)

KIMYEONGJUN·2026년 10월 1일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

Arrays.sort(numbers);
배열의 원소들을 오름차순으로 정렬한다. 이렇게 하면 가장 작은 음수들이 맨 앞으로 오고 가장 큰 양수들이 맨 뒤로 배치된다.
int length = numbers.length;
배열의 길이를 구해서 변수에 저장한다.
int case1 = numbers[0] * numbers[1];
배열의 맨 처음에 있는 가장 작은 두 수를 곱한다.
절댓값이 큰 음수 두 개를 곱해서 큰 양수를 만드는 경우를 계산한다.
int case2 = numbers[length - 1] * numbers[length - 2];
배열의 맨 끝에 있는 가장 큰 두 수를 곱한다. 일반적인 양수끼리의 곱셈 중 최댓값을 구한다.
return Math.max(case1, case2);
음수를 곱한 결과(case1)와 양수를 곱한 결과(case2) 중 더 큰 값을 선택하여 반환한다.
main 메서드
문제에서 제시된 세 가지 테스트 케이스 배열을 각각 만들고, solution 메서드에 전달하여 나온 결과를 화면에 출력한다.

코드로 구현

import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        Arrays.sort(numbers);
        int length = numbers.length;
        int case1 = numbers[0] * numbers[1];
        int case2 = numbers[length - 1] * numbers[length - 2];
        return Math.max(case1, case2);
    }
}

프로그래머스 코드

package programmers.programmers2;

import java.util.Arrays;

// 프로그래머스 최댓값 만들기 (2)
public class Main160 {
    public static int solution(int[] numbers) {
        Arrays.sort(numbers);
        int length = numbers.length;
        int case1 = numbers[0] * numbers[1];
        int case2 = numbers[length - 1] * numbers[length - 2];
        return Math.max(case1, case2);
    }

    public static void main(String[] args) {
        int[] numbers1 = {1, 2, -3, 4, -5};
        int[] numbers2 = {0, -31, 24, 10, 1, 9};
        int[] numbers3 = {10, 20, 30, 5, 5, 20, 5};

        System.out.println(solution(numbers1)); // 15
        System.out.println(solution(numbers2)); // 240
        System.out.println(solution(numbers3)); // 600
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글