프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 최댓값 만들기(2)(Java)

Sigfriede 2023. 4. 1. 01:59

  문제 설명

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

 

  제한사항

  • -10,000 <= numbers의 원소 <= 10,000
  • 2 <= numbers의 길이 <= 100

 

  입출력 예

numbers result
[1, 2, -3, 4, -5] 15
[0, -31, 24, 10, 1, 9] 240
[10, 20, 30, 5, 5, 20, 5] 600
import java.util.Arrays;
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int pos = 0;
        int neg = 0;
        Arrays.sort(numbers);
        for (int i = 0; i < numbers.length; i++) {
            pos = numbers[numbers.length - 1] * numbers[numbers.length - 2];
            neg = numbers[0] * numbers[1];
            }
        if (pos > neg) {
            answer = pos;
        } else {
            answer = neg;
        }
        return answer;
    }
}

  이 문제는 배열에 음수가 포함되므로 음수의 계산 역시 고려하는 것이 관건인 듯합니다. pos 변수는 양수를, neg 변수는 음수를 뜻합니다. 사실 배열에 음수가 포함되지 않은 경우도 있지만… 마땅히 지을 변수명이 없어서, 대강 가장 큰 수끼리의 곱셈과 작은 수끼리(음수)의 곱셈을 담을 변수라고만 생각해주시면 될 것 같습니다.

  우선 배열에서 가장 큰 값과 작은 값을 구해야하므로 Arrays 클래스의 sort 메소드로 오름차순 정렬을 먼저 해주었습니다. 이후 for문으로 numbers의 길이만큼 순회합니다. pos는 오른쪽 끝에서 숫자 두 개를, neg는 왼쪽 끝에서 숫자 두 개를 꺼내어 곱합니다. 만약 neg에서 숫자 두 개를 곱할 때, 음수가 한 개더라도 상관 없습니다. 어차피 이후 if문에서 비교를 통해 더 큰 쪽의 결과값을 반환하게 되어있으니까요.