[programmers/JAVA] 나누어 떨어지는 숫자 배열

AmeriKano·2023년 3월 15일
0

문제 설명

문제 링크


접근 방법

이 문제도 배열과 스트림을 활용한 두 가지의 방법으로 해결하였다.
배열로는
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();
    }
}

제출 결과

배열을 이용한 방법

스트림을 이용한 방법


마무리하며

이 문제도 역시 스트림으로 해결한 경우의 시간이 더 오래 걸리는 것을 확인할 수 있었다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글