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만을 값으로 가진 후 리턴된다.
문제를 한번 다 풀어본 후
저번과 똑같은 방식으로 문제를 푼다면
아무런 공부 효과가 없이 답 외우기뿐 안될 것 같다는 생각이 들었다.
앞으로 남은 이틀동안은 이번에 문제를 풀었던 것 처럼 답을 보더라도
새로운 방식으로 문제를 풀면서 하나라도 더 새로운걸 배워서 활용해보고 익혀보려한다.
'Plo Algorithm' 카테고리의 다른 글
프로그래머스Lv1 문자열 내 p와 y의 개수 (0) | 2022.03.16 |
---|---|
프로그래머스Lv1 내적 (0) | 2022.03.16 |
프로그래머스Lv1 2016년 (0) | 2022.03.16 |
프로그래머스 Lv1 부족한 금액 계산하기 (0) | 2022.03.16 |
프로그래머스 Lv1 x만큼 간격이 있는 n개의 숫자 (0) | 2022.03.15 |