[프로그래머스] [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;
}
}
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[프로그래머스] [Level1] 문자열 내 p와 y의 개수 - Java (0) | 2020.12.28 |
---|---|
[프로그래머스] [Level1] 두 정수 사이의 합 - Java (0) | 2020.12.26 |
[프로그래머스] [Level1] 가운데 글자 가져오기 - Java (0) | 2020.12.26 |
[프로그래머스] [Level1] 3진법 뒤집기 - Java (0) | 2020.12.26 |
[프로그래머스] [Level1] K번째수 - Java (0) | 2020.12.26 |