문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12910
여러 데이터를 받아 저장해 놓을 필요가 있기 때문에 ArrayList를 사용했다.
배열을 하나씩 순회하면서 divisor로 나눠 떨어지면 정답에 추가한다. 그리고 정답 배열을 오름차순으로 정렬한다. 만약 나눠떨어지는 수가 없다면 -1을 정답 배열에 추가한다.
배열을 하나씩 순회하면서 divisor로 나눠 떨어지면 result ArrayList에 추가한다. 만약 나눠떨어지는 수가 없다면 -1을 result ArrayList에 추가한다. 리턴 형식을 맞춰주고 Arrays.sort(배열)를 사용하기 위해 ArrayList인 result를 스트림 연산을 통해 일반 배열로 바꿔준다. 바뀐 배열로 오름차순 정렬을 해주고 리턴해준다.
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer ;
ArrayList<Integer> result = new ArrayList<>();
for(int i : arr){
if(i % divisor == 0){
result.add(i);
}
}
if(result.size() == 0){
result.add(-1);
}
answer = result.stream().mapToInt(i-> i).toArray();
Arrays.sort(answer);
return answer;
}
public static void main(String[] args) {
int[] ans = new Solution().solution(new int[]{5,9,7,10}, 5);
for(int i:ans){
System.out.print(i+" ");
}
}
}
나중에 answer배열을 정렬하는 것도 좋지만 배열을 먼저 Arrays.sort(arr)를 사용하여 sort해주고 시작하는것도 편할 것 같다는 생각이 든다.
배열에서 아무것도 나눠떨어지지 않는다면 -1을 출력해 주는 것을 잊지말자.
어떤 문제를 풀던지 예외처리를 잘 해줘야 한다는 사실을 상기했다!!!!!
또 까먹었다.. ArrayList를 일반 배열로 바꾸는 거..
ArrayList list = new ArrayList()
int[] arr = list.stream().mapToInt(i -> (int)i).toArray();
// ArrayList의 자료형을 정해줬을때는 자동으로 unboxing 되므로 스트림 연산에서 형변환 할 필요가 없다.
ArrayList<Integer> list2 = new ArrayList<>()
int[] arr = list2.stream().mapToInt(i -> i).toArray();