[프로그래머스] [Level1] 나누어 떨어지는 숫자 배열 - Java

2020. 12. 26. 18:49프로그래밍/알고리즘

반응형

💁‍♀️ 링크

programmers.co.kr/learn/courses/30/lessons/12910

 

📃 문제 

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

 

제한사항

  • arr은 자연수를 담은 배열입니다.

  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.

  • divisor는 자연수입니다.

  • array는 길이 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]

 

🐾 문제풀이

for문을 돌려 arr배열의 요소들을 일일이 divisor로 나누어 나머지가 0 이면 list배열에 담은 뒤 정렬하여 답을 도출했는데,

그렇게 하지 않고 Stream을 이용하여 람다식으로 간결하고 코드를 작성할 수 있다.

 

Stream 은 java 8부터 추가된 기능으로 컬렉션의 저장 요소를 하나씩 참조해서 람다식을 적용해서 처리할 수 있도록 해주는 기능이다.

* filter() : 컬렉션에 조건을 걸어줄 때 사용

 

 

💻 코드

//
// for문을 사용해 하나씩 가공한 경우
//
import java.util.*;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        
        ArrayList<Integer> list = new ArrayList<>();
        for(int i : arr){
            if(i%divisor == 0) list.add(i);
        }
        if(list.size() == 0) list.add(-1);
        Collections.sort(list);
        
        answer = new int[list.size()];
        for(int l : list) answer[list.indexOf(l)] = l;
        return answer;
    }
}
// 
// Stream을 사용한 경우
//
import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int divisor) {
    	// Stream의 filter() 사용
        int[] answer = Arrays.stream(arr).filter(x -> x % divisor == 0).toArray();
        if(answer.length == 0) answer = new int[] {-1};
        java.util.Arrays.sort(answer);
        return answer;
    }
}

 

 

 

반응형