문제
내가 작성한 정답
import java.util.Arrays;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
Arrays.sort(numbers);
int max1 = numbers[0]*numbers[1];
int max2 = numbers[numbers.length-1]*numbers[numbers.length-2];
// 방법1 : if - else
if (max1 > max2) answer = max1;
else answer = max2;
return answer;
// 방법 2 : 삼항연산자
return max1>max2? max1 : max2;
// 방법 3 : Math.max함수
return Math.max(max1,max2);
}
}
최대값을 출력하는 함수 Math.max(max1, max2);로 최대값을 구할 수도 있다.
import java.util.Arrays;
import static java.util.Arrays.stream;
class Solution {
public int solution(int[] numbers) {
int max1 = stream(numbers)
.sorted()
.limit(2)
.reduce(1, (a, b) -> a * b); // 초기값을 제공하지 않으면 null일 수도 있으므로 type이 OptionalInt가 되어야하기 때문에 초기값을 제공해준다
int max2 = Arrays.stream(numbers)
.boxed() // 내림차순 정리하려면 기본타입에서는 제공되지 않아 boxed로 객체타입으로 변경한 후 아래서 sorted해줘야한다.
.sorted((a, b) -> b-a)
.limit(2)
.reduce(1,(a,b)->a*b);
return max1 > max2 ? max1 : max2;
}
}
boxed() 메서드는 기본 데이터 타입의 스트림을 객체 타입의 스트림으로 변환하는 역할을 한다.
다른 사람들이 작성한 정답
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int len = numbers.length;
Arrays.sort(numbers);
return Math.max(numbers[0] * numbers[1], numbers[len - 2] * numbers[len - 1]);
}
}
Share article