코딩테스트 - 프로그래머스/Lv. 0

[36] JAVA 최대값 만들기(1)

유혁스쿨 2023. 11. 16. 16:43
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);
    }
}

 

[풀이과정] 

  1. Arrays.stream을 통해 배열을 stream으로변환
  2. Stream의 boxed()를 통해 각 요소들을 Wrapper 형태로 변환
  3. Stream의 sorted()를 통해 각 요소들을 오름차순 정렬
  4. 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