import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(int[] arr, int divisor) {
List<Integer> list = new ArrayList<>();
int nullCount = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % divisor != 0) {
nullCount++;
}
if (arr[i] % divisor == 0) {
list.add(arr[i]);
}
}
if (nullCount == arr.length) {
list.add(-1);
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] += list.get(i);
}
// answer = list.toArray(); <- 불가능
Arrays.sort(answer);
return answer;
}
}
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
if(answer.length == 0) answer = new int[] {-1};
java.util.Arrays.sort(answer);
return answer;
}
}
Arrays.stream(arr): 배열 arr을 스트림으로 변환한다.
.filter(factor -> factor % divisor == 0): 스트림의 각 요소를 조건에 따라 필터링합니다. 여기서는 주어진 조건 factor % divisor == 0을 만족하는 요소들만을 남긴다. 즉, 배열의 각 요소를 divisor로 나누었을 때 나머지가 0인 경우만을 선택한다.
.toArray(): 필터링된 요소들을 배열로 변환한다. 필터링된 요소들만을 포함하는 새로운 배열이 생성된다.
if(answer.length == 0) answer = new int[] {-1};: 필터링된 배열의 길이가 0인 경우, 즉 나누어 떨어지는 요소가 없는 경우에는, 새로운 배열을 생성하여 -1을 요소로 포함시킨다.
java.util.Arrays.sort(answer);: 필터링된 배열을 정렬한다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(int[] arr, int divisor) {
List<Integer> list = new ArrayList<>();
int nullCount = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % divisor == 0) {
list.add(arr[i]);
} else {
nullCount++;
}
}
if (nullCount == arr.length) {
return new int[]{-1};
}
// List<Integer>를 Integer[]로 변환
Integer[] tempArray = list.toArray(new Integer[0]);
// Integer[]를 int[]로 변환
int[] answer = new int[tempArray.length];
for (int i = 0; i < tempArray.length; i++) {
answer[i] = tempArray[i];
}
Arrays.sort(answer);
return answer;
}
}
toArray(array 크기)를 사용하면 Integer(int 아님) 타입으로 변환할 수 있다. (물론 Integer 말고도 다른 원시타입도 가능하다)
Integer[] array = list.toArray(new Integer[0]);: 예를 들어 [1,2,3]이 담긴 list를 array 타입으로 변환하고자 할 때 위 방법을 사용할 수 있다. list.toArray(new Integer[0])에서 new Integer[0]은 반환될 배열의 타입을 Integer[]로 지정하는 역할을 한다. 실제로는 메서드가 리스트의 크기에 맞는 새로운 배열을 생성하여 반환한다. 예를 들어, list가 [1, 2, 3]을 포함하고 있다면, list.toArray(new Integer[0])는 사실상 new Integer[3]과 같은 새로운 배열을 내부적으로 생성하고, [1, 2, 3]을 이 배열에 복사한 뒤 반환한다.
이 방법은 코드를 더 깔끔하게 만들고, 타입 안전성을 보장하며, 실수로 배열의 크기를 잘못 지정하는 오류를 방지할 수 있다.
List를 array로 바꿔야 할 때, 만약 배열의 크기가 확실하다면 toArray(크기)를, 크기가 확실하지 않다면 반복문으로 array로 바꿔주면 된다.