코딩테스트 연습 - 제일 작은 수 제거하기
문제 설명
- 매개변수 : int[] arr - 정수를 저장한 배열
- 리턴값 : arr 배열에서 가장 작은 수를 제거한 배열
설계
- arr 배열 길이가 1이면 -1을 return
- List에 arr 값들을 넣는다.
- 가장 작은 값을 삭제한다. (
Collection.min
)
코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Solution {
public int[] solution(int[] arr) {
if (arr.length == 1)
return new int[] {-1};
int min = Integer.MAX_VALUE;
List<Integer> list = new ArrayList<>();
for (int a : arr)
list.add(a);
list.remove(Collections.min(list));
return list.stream().mapToInt(i -> i).toArray();
}
}
class Solution1 {
public int[] solution(int[] arr) {
int[] answer = Arrays.stream(arr).filter(i -> i != Arrays.stream(arr).min().getAsInt()).toArray();
if(answer.length == 0)
return new int[] {-1};
else
return answer;
}
}
시간 복잡도
- Solution → O(n)
- Solution1 → O(n) ?
- 스트림을 사용하면 속도는 더 느리다.
참고
- 처음에 리스트에서 가장 작은 값을 지우려고 arr 배열에서 반복문을 통해 가장 작은 값(min)을 찾고, List 에서
remove(min)
으로 지워줬었다. 하지만 Collections 클래스에서 제공하는 메서드 중에 바로 최소값을 찾아주는 함수가 있었다. Collections 클래스에 유용한 메서드가 많으니 참고하자!
Collections 메서드
T **min**(*Collection*<? *extends* T> coll)
T **max**(*Collection*<? *extends* T> coll)
void **reverse**(*List*<?> list)
void **shuffle**(*List*<?> list)
void **sort**(*List*<T> list)
: 오름차순 정렬
void **sort**(*List*<T> list, Comparator c)
: Comparator 정렬 기준으로 정렬