import java.util.Queue;
import java.util.LinkedList;
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
Queue<Integer> q = new LinkedList<>();
Arrays.sort(arr);
for(int target: arr) {
if(target%divisor==0) q.add(target);
}
if(q.isEmpty()) return new int[]{-1};
int[] answer = new int[q.size()];
int idx = 0;
while(!q.isEmpty()) {
answer[idx++] = q.remove();
}
return answer;
}
}
public class Divisible {
public int[] divisible(int[] array, int divisor) {
// ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.
ArrayList<Integer> ret = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (array[i] % divisor == 0) {
ret.add(array[i]);
}
}
return ret.stream().mapToInt(i -> i).toArray();
}
}
나는 queue를 사용했는데 list를 사용한 풀이이다.
로직 상 크게 다른 점은 없지만 내가 고민했던 'list를 int 배열로 바꾸는 법'에 대한 구현이 이루어져 있다.
ret.stream().mapToInt(i -> i).toArray();
이를 활용해서 내가 쓴 코드를 수정하면 다음과 같다.
import java.util.Queue;
import java.util.LinkedList;
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
Queue<Integer> q = new LinkedList<>();
Arrays.sort(arr);
for(int target: arr) {
if(target%divisor==0) q.add(target);
}
if(q.isEmpty()) return new int[]{-1};
return q.stream().mapToInt(i->i).toArray();
}
}
코드 줄 수가 훅 줄어든다 !
성능도 비교해보았다.
for문 활용
스트림 활용
메모리 사용량은 거의 비슷하고,
다만 for문을 활용하여 직접 넣어주는게 시간 면에서는 훨씬 빠른 것을 확인했다.
역시 코드 줄 수가 줄어든다고 능사가 아니여
구현엔 시간이 5분도 안 걸렸지만, 다른 풀이를 보면서 람다식 + 스트림을 이용해 list를 int형 배열으로 바꾸는 법을 알아두는 게 좋을 것 같아 글을 썼다. 잘 알아두고 나중에 꼭 필요한 순간이 온다면 써먹어 보자.