이 문제도 배열과 스트림을 활용한 두 가지의 방법으로 해결하였다.
배열로는
1. arr
과 길이가 같은 배열을 하나 만들어서, divisor
로 나누어 떨어지는 원소의 개수(size
)를 구한다. 이 개수가 0
인 경우 {-1}
을 반환한다.
2. 이후 size
의 크기를 가지는 배열을 새로 만들어 거기에 divisor
로 나누어 떨어지는 원소들을 저장한 후, Arrays.sort()
오름차순으로 정렬한 뒤 최종 정답을 반환한다.
스트림으로는 결과가 없을 때 빈 배열을 반환하는 거였다면 한 줄로도 할 수 있었겠지만, {-1}
을 반환해야 하므르 그 부분에 대한 처리를 해주었다. 덕분에 코드 길이는 더 짧았다. 유의할 점은, 첫번째 스트림에서 합을 구해버리면(sum()
) 그 스트림이 닫혀버리므로 두 번째 스트림을 만들어 사용해야 한다는 것이다.
// 배열을 활용한 방법
import java.util.*;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] divided = new int[arr.length];
int size = 0;
for (int a: arr) {
if (a % divisor == 0) size++;
}
if (size == 0) return new int[] {-1};
int[] answer = new int[size];
int index = 0;
for (int a: arr) {
if (a % divisor == 0) {
answer[index] = a;
index++;
}
}
Arrays.sort(answer);
return answer;
}
}
// 스트림을 활용한 방법
import java.util.*;
class Solution {
public int[] solution(int[] arr, int divisor) {
int sum = Arrays.stream(arr).filter(e -> e % divisor == 0).sum();
if(sum == 0)
return new int[] {-1};
else
return Arrays.stream(arr)
.filter(e -> e % divisor == 0).sorted().toArray();
}
}
배열을 이용한 방법
스트림을 이용한 방법
이 문제도 역시 스트림으로 해결한 경우의 시간이 더 오래 걸리는 것을 확인할 수 있었다.