
내가 생각했을때 문제에서 원하는부분
정수 배열 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
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.