최댓값 만들기(1)
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
0 ≤ numbers의 원소 ≤ 10,000
2 ≤ numbers의 길이 ≤ 100
💻 풀이
Arrays.sort() 를 사용해 배열 속 숫자를 오름차순으로 정렬해준다.length -1 / -2 로 큰 수 2개를 곱해 return 해 준다.※ 내림차순을 사용하기 위해서는 int 배열을 List 로 만들어 줘야 하기 때문에 오름차순을 선택해주었다.
⌛ 시간 0.33ms ~ 0.53ms
import java.util.Arrays;
public String solution(int[] numbers) {
Arrays.sort(numbers);
return numbers[numbers.length -1] * numbers[numbers.length -2];
}
💻 풀이
max1 보다 크다면 max1의 값을 max2로, num의 값을 max1에 넣어준다.※ 만약 최대값이 2개 이상일 경우 max2에도 최대값이 갱신될 수 있도록 else if 를 사용해준다.
⌛ 시간 0.02ms ~ 0.05ms
전체코드
public String solution2(int[] numbers) {
int max1 = 0;
int max2 = 0;
for(int num : numbers){
if(num > max1){
max2 = max1;
max1 = num;
}else if(num > max2){
max2 = num;
}
}
return max1 * max2;
}
💻 풀이
Arrays.stream() : int 배열을 stream으로 변환해준다.boxed() : int 를 Integer로 변환해준다.sorted((a,b) -> b - a) : 내림차순으로 정렬해준다.a - b 는 오름차순!limit(2) : 상위 2개의 값만 남겨준다.mapToInt(Integer::intValue) : Integer 를 int로 변환해준다.toArray() : 배열로 만들어 준다.⌛ 시간 3.50ms ~ 10.96ms
전체코드
import java.util.Arrays;
public String solution3(int[] numbers) {
int[] maxNum = Arrays.stream(numbers)
.boxed()
.sorted((a,b) -> b - a)
.limit(2)
.mapToInt(Integer::intValue)
.toArray();
return maxNum[0] * maxNum[1];
}