본문 바로가기

문제 풀이/Programmers

[프로그래머스] 나누어 떨어지는 숫자 배열 (JAVA)

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하

programmers.co.kr


[풀이]

1. Arrays.stream으로 배열의 요소를 가져온다.

2. filter를 사용해 조건에 해당하는 요소를 구한다.

3. toArray를 사용해 2에서 나온 요소들을 배열에 담아준다.

4. 배열이 비어있을 때 -1을 출력한다는 조건을 만족하게 하기 위해 -1을 담아준다.

5. 배열을 오름차순으로 정렬해서 출력해주어야 하므로  sort를 해준다.

[접근]

1. 처음에는 정석대로 문제를 해결하였다.

2. 더 짧은 방식이 없을까 하고 검색을 해보니 Arrays.stream을 활용한 방법이 있는것을 확인할 수 있었다.

[코드]

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        // Arrays.stream(array).filter(요소 -> 조건)
        // Arrays.stream() == 배열의 요소를 가져오기
        // + Arrays.stream(arr, int a, int b) == arr[a]~arr[b-1]의 요소들을 들고옴
        // 조건에 해당하는 요소 == filter
        // toArray() 배열로 만들기
        // 즉, arr의 요소를 들고와 조건을 만족하는 것을 배열로 만들기
        int[] answer = Arrays.stream(arr).filter(i -> i % divisor == 0).toArray();
        
        // 배열이 비어있으면 -1을 출력해야 하므로
        if(answer.length == 0)
            answer = new int[] {-1};
        // 오름차순으로 출력해야 하므로 정렬하기
        Arrays.sort(answer);
        
        return answer;
    }
}