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
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[Java][프로그래머스][Level 1] 나누어 떨어지는 숫자 배열
문제 설명 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담
ju-nam2.tistory.com
https://wakestand.tistory.com/419
자바 스트림(Stream) 예제부터 사용법까지 정리
자바에서 스트림이라고 하면 대부분 엄청나게 어려운 기술인 줄 알고 시작도 전에 포기하는 경우가 많은데 스트림은 엄청 간단하고 유용한 기술이다 다만 설명하는 사람들이 쉬운 걸 너무 어렵
wakestand.tistory.com
'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 |