array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
arr | divisor | return |
---|---|---|
[5, 9, 7, 10] | 5 | [5, 10] |
[2, 36, 1, 3] | 1 | [1, 2, 3, 36] |
[3,2,6] | 10 | [-1] |
입출력 예#1
arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다.
따라서 [5, 10]을 리턴합니다.
입출력 예#2
arr의 모든 원소는 1으로 나누어 떨어집니다.
원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.
입출력 예#3
3, 2, 6은 10으로 나누어 떨어지지 않습니다.
나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.
class Solution {
public int[] solution(int[] arr, int divisor) {
ArrayList<Integer> arrList = new ArrayList<Integer>();
Arrays.sort(arr);
// 나누어 떨어지는 값 구하기
for(int i=0; i<arr.length; i++) {
if(arr[i] % divisor == 0) {
arrList.add(arr[i]);
}
}
// 값이 없을 경우
if(arrList.size() == 0) {
arr = new int[1];
arr[0] = -1;
// arr = {-1};
}
// 있을 경우 List -> int[]
else {
arr = new int[arrList.size()];
for(int i=0; i<arr.length; i++) {
arr[i] = arrList.get(i);
}
}
return arr;
}
}
class Solution {
public int[] solution(int[] arr, int divisor) {
Arrays.sort(arr);
List<Integer> list = new ArrayList<Integer>();
for(int item : arr) {
if(item % divisor == 0) {
list.add(item);
}
}
if(list.size() == 0) {
int[] answer = { -1 };
return answer;
}
int[] answer = new int[list.size()];
for(int i = 0; i < lstSize; ++i) {
answer[i] = lst1.get(i);
}
return answer;
}
}
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = Arrays.stream(arr)
.filter(i -> i % divisor == 0).toArray();
Arrays.sort(answer);
int cnt = (int)answer.length;
if (cnt == 0) return new int[] {-1};
return answer;
}
}
toArray()
, 배열로 변환.Arrays.sort()
메서드로 배열 오름차순 정렬.흠~~확실히 배열은 어느 위치에서 선언하고 초기화까지 하느냐에 따라 효율이 좀 차이나는 것 같기도~~🤔 선언만 해두고 초기화는 나중에 한다던가 하는,,,🤔
처음에 문제 풀 때는 배열과 리스트를 사용해서 풀어야겠다고 생각했었다.
아무래도 배열과 리스트에서 사용할 수 있는 메서드가 각자 다르기 때문에 이 둘을 이용한 값 주고받기로 풀었는데 역시...스트림만한게 없다;;;🙂;;;;
스트림을 사용하면 이렇게 가독성 좋고 깔끔하게 풀리는 것을....
절대로 놓을 수 없는 스트림....계속 사용해봐야겠다!!!🤓🤓🤓