정수 배열을 하나 받습니다. 배열의 중복값을 제거하고 배열 데이터를 내림차순으로 정렬해서 반환하는 solution( ) 함수를 구현하세요.
제약조건
- 배열 길이는 2 이상 1,000 이하입니다.
- 각 배열의 데이터 값은 -100,000 이상 100,000 이하입니다.
입출력의 예
코드 리뷰
import java.util.Arrays;
import java.util.Collections;
class Solution {
private static int[] solution(int[] arr) {
// ❶ 중복값 제거
Integer[] result = Arrays.stream(arr).boxed().distinct().toArray(Integer[]::new);
// Arrays.stream() stream으로 변환
// boxed() Integer로 레퍼런스 타입으로 변환
// distinct() 중복 제거
// toArray(Integer[]::new) 중복제거된 데이터를 반환
Arrays.sort(result, Collections.reverseOrder()); // ❷ 내림차순 정렬
// int형 배열로 변경 후 반환
return Arrays.stream(result).mapToInt(Integer::intValue).toArray();
// mapToInt(Integer::intValue) Integer[] 형태 배열을 int[] 형태로 변환
}
}
스트림
데이터의 흐름
데이터의 소스를 추상화하고 데이터를 다루는데 유용한 메서드를 정의한 것
배열 또는 컬렉션을 스트림으로 변환하면 반복문을 사용하지 않고 컬렉션의 데이터를 배열에 담아서 반환한거나
특정 조건에 따라 필터링 하는 등 코드의 양을 줄이고 가독성을 향상
다만 코딩 테스트 시간 복잡도 측면에서는 반복문과 스트림은 성능 차이가 크게 없으므로 반복문을 사용해도된다
스트림없이 TreeSet 사용 코드
import java.util.Collections;
import java.util.TreeSet;
public class Solution {
private static int[] solution(int[] arr) {
// ❶ 중복값 제거, ❷ 내림차순 정렬
TreeSet<Integer> set = new TreeSet<>(Collections.reverseOrder());
for (int num : arr) {
set.add(num);
}
// int형 배열에 담아서 반환
int[] result = new int[set.size()];
for (int i = 0; i < result.length; i++) {
result[i] = set.pollFirst();
}
return result;
}
}
'CS > 알고리즘' 카테고리의 다른 글
스트림(Stream) (0) | 2024.08.01 |
---|---|
ArrayList 효율성 (0) | 2024.07.31 |
메서드 - 람다식 (compare) (0) | 2024.07.31 |
문자열 (0) | 2024.07.31 |
Primitive Type & Reference Type (0) | 2024.07.30 |