정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
생각한 풀이
1. 배열로 입력받은 값들 중에서 가장큰 두수의 곱을 찾아야하니 sort후 length-1,-2를 곱하자
2. 아니면 그냥 이중 for문으로 값이 가장 큰값을 찾는다
import java.util.Arrays;
class Solution {
public int solution(int[] numbers) {
int answer = numbers[0]*numbers[1];
for (int i=0;i<numbers.length;i++) {
for (int j=i+1;j<numbers.length;j++) {
if (numbers[i]*numbers[j]>answer) {
answer=numbers[i]*numbers[j];
}
}
}
return answer;
}
}
🐴 풀이
1. 최댓값을 찾기 위해 초기 값을 numbers[0]*numbers[1]로 설정
2. for문을 돌면서 j는 i+1로 시작한 인덱스 앞에서부터 곱을 해야하므로 자기자신을 넘기려고 +1을 했다
3. 만약 answer보다 두 수의 곱이 크다면 answer에 값을 넣는다
첫번째 풀이 방법으로 하려니 음수가 포함되어 있을 때 최댓값을 계산하는 방법이 떠로르지 않았다
import java.util.Arrays;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
Arrays.sort(numbers);
int f= numbers[0]*numbers[1];
int e = numbers[numbers.length-2]*numbers[numbers.length-1];
answer = Math.max(f,e);
return answer;
}
}
🐴 풀이
1. 양수의 최대값을 sort로 length -1과 length -2 에 있으니 두 수의 곱으로 나타낼 수 있고
2. 음수의 최댓값은 sort로 0, 1에 있을 것이다.
3. 음수 하나라면 Math.max()로 양수의 곱이 선택
4. 음수가 두개라도 Math.max()로 양수의 곱과 비교해서 출력
다른 사람의 풀이를 보고 따라 해봄