728x90
반응형
문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
제한사항
- 0 ≤ numbers의 원소 ≤ 10,000
- 2 ≤ numbers의 길이 ≤ 100
입출력 예
numbers | result |
[1, 2, 3, 4, 5] | 20 |
[0, 31, 24, 10, 1, 9] | 744 |
입출력 예 #1
- 두 수의 곱중 최댓값은 4 * 5 = 20 입니다.
입출력 예 #2
- 두 수의 곱중 최댓값은 31 * 24 = 744 입니다.
[나의 풀이]
import java.util.List;
import java.util.stream.Collectors;
import java.util.Arrays;
class Solution {
public int solution(int[] numbers) {
List<Integer> collect = Arrays.stream(numbers)
.boxed()
.sorted()
.collect(Collectors.toList());
return collect.get(collect.size()-1) * collect.get(collect.size()-2);
}
}
[풀이과정]
- Arrays.stream을 통해 배열을 stream으로변환
- Stream의 boxed()를 통해 각 요소들을 Wrapper 형태로 변환
- Stream의 sorted()를 통해 각 요소들을 오름차순 정렬
- List로 변환후 해당 리스트에서 마지막 요소인 size()-1, 마지막에서 두번째 요소인 size()-2로 get 하여 곱셈 연산
[다른 풀이] Arrays.sort([] args)
import java.util.*;
class Solution {
public int solution(int[] numbers) {
Arrays.sort(numbers); // 배열 요소 오름차순 정렬
return numbers[numbers.length-1] * numbers[numbers.length-2];
}
}
나의 풀이와 비교했을때, Arrays의 Stream을 통해 박싱, 정렬 후 List로 다시 변환하지 않는다.
단순히 Arrays.sort()만 호출함으로써 배열 상태에서 정렬을 해주고
다시 그 배열의 인덱스를 접근하여 곱셈 연산을 수행하였다.
Stream 변환 리소스, 박싱, 정렬, 리스트 변환 리소스
최소 4가지의 리소스 비용을 줄이는 코드이다.
728x90
반응형
'코딩테스트 - 프로그래머스 > Lv. 0' 카테고리의 다른 글
[38] JAVA 아이스 아메리카노 (0) | 2023.11.16 |
---|---|
[37] JAVA 꼬리 문자열 (0) | 2023.11.16 |
[35] 부분 문자열 (0) | 2023.11.16 |
[34] JAVA 배열 뒤집기 (0) | 2023.11.16 |
[33] JAVA 편지 (0) | 2023.11.16 |