Level. 1
문제
풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr, int divisor) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i<arr.length; i++){
if(arr[i]%divisor == 0){
list.add(arr[i]);
}
}
if(list.isEmpty()) {
list.add(-1);
}
int[] answer = list.stream().mapToInt(i -> i).toArray();
Arrays.sort(answer);
return answer;
}
}
list를 사용하여 정답을 구한 후, return타입에 맞추어 array로 변경해 주었다.
ListArray -> Array
list.stream().mapToInt(i -> i).toArray();
다른 사람 풀이
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
if(answer.length == 0) answer = new int[] {-1};
java.util.Arrays.sort(answer);
return answer;
}
}
위 코드는 스트림(stream)을 사용하여 매우 간결하게 문제를 해결하였다.
stream..? 아주 유용해 보이니 사용법과 주로 언제 사용하게 되는지 알아보겠다.
stream - 스트림
스트림을 사용하면 배열이나 컬렉션(List, Set, Map)으로 원하는 값을 얻을 때 for문 도배를 방지할 수 있다.
스트림은 선언 - 가공 - 반환 세 부분으로 이뤄진다.
1. 스트림 - 선언
Stream<데이터타입> stream명 = Arrays.stream(배열명);
Stream<데이터타입> stream명 = 리스트명.stream();
Stream<데이터타입> stream명 = Stream.of('값', '값'....);
Arrays.stream(배열명).가공메소드...
리스트명.stream.가공메소드...
2. 스트림 - 가공
- 스트림을 필요한 형태로 가공한다.
- .filter(파라미터) -> {코드}) : 코드에 맞는 값만 가져온다
3. 스트림 - 반환
- 가공한 값을 원하는 배열, 컬렉션(List, Set, Map) 등의 원하는 형태로 반환한다.
- .toArray() : 배열로 반환
- .collect(Collectors.toList()) : List 로 반환
- .collect(Collectors.toSet()) : Set 으로 반환
- .collect(Collectors.toMap()) : Map 으로 반환
Arrays.stream()
Arrays.stream(array, int a1, int a2) // a1부터 (a2-1)까지의 요소를 가져온다.
- .filter() : 가져온 요소에 조건을 건다.
Arrays.stream(array).filter(요소 -> 조건) - .toArray() : 가공한 값을 배열로 반환한다.
stream 장단점
장점 | - 사용하기 편하다. - 코드가 단축된다 - 가독성이 높아진다 |
단점 | - 디버그가 힘들다 - 재활용이 불가능하다. |
https://school.programmers.co.kr/learn/courses/30/lessons/12910?language=java
https://wakestand.tistory.com/419
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스] 문자열을 정수로 바꾸기 / valueOf , int와 Integer (0) | 2023.04.29 |
---|---|
[프로그래머스] 가운데 글자 가져오기 - substring (0) | 2023.04.11 |
[프로그래머스]문자열 내림차순으로 배치하기 (0) | 2023.04.11 |
[프로그래머스] 두 정수의 합 - Math클래스 (0) | 2023.04.10 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2023.04.09 |