본문 바로가기

Plo Algorithm

프로그래머스Lv1 나누어 떨어지는 숫자 배열

나누어 떨어지는 숫자 배열

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] arr1 = Arrays.stream(arr).filter(parameterArr -> parameterArr % divisor == 0).toArray();
        arr1 = Arrays.stream(arr1).sorted().toArray();
        if (arr1.length ==0) arr1 = new int[]{-1};
        return arr1;
    }
}

지금껏 풀어왔던 배열 문제들과 유사한 문제지만

매번 똑같은 방식으로 풀기보다 새로운 개념을 배우며 풀어보면 좋을 것 같아 Arrays.stream을 사용해서 풀어봤다.


- Arrays.stream(arr) -

스트림은 데이터의 흐름이다.

배열 혹은 collection객체에 함수를 여러개 조합해서 원하는 결과를 필터링할 수 도 맵핑할 수도 있다.

stream을 사용하지않고 for문을 여러번 작성해서 처리해야하는 가공 과정들을 stream을 이용하면 한줄로 가공이 가능하다.

Arrays.stream(arr) 함수로 arr배열을 순회하는 stream객체를 만들어줬다.

 

- .filter(parameterArr -> parameterArr % divisor == 0).toArray() -

 

- .filter(parameterArr) -

Array.stream(arr)의 인자 값인 arr은 filter함수 내에서 parameterArr로 정의된다.

.filter함수는 filter의 괄호 안에 정의된 조건 값이 true인 값들로만 새로운 스트림을 생성한다.

 

- parameterArr -> parameterArr % divisor == 0 -

(parameterArr -> 조건값 일치)할 때에 parameterArr객체에 값이 할당된다.

 

toArray()

마지막으로 만들어진 객체를 ArrayType으로 반환한다.

 

- if (arr1.length ==0) arr1 = new int[]{-1}; -

만약 위의 조건에 적합하지 않아 arr에 할당된 값이 없다면 arr는 -1만을 값으로 가진 후 리턴된다.


문제를 한번 다 풀어본 후

저번과 똑같은 방식으로 문제를 푼다면

아무런 공부 효과가 없이 답 외우기뿐 안될 것 같다는 생각이 들었다.

앞으로 남은 이틀동안은 이번에 문제를 풀었던 것 처럼 답을 보더라도

새로운 방식으로 문제를 풀면서 하나라도 더 새로운걸 배워서 활용해보고 익혀보려한다.