Hayden's Archive
[알고리즘] 프로그래머스 : 나누어 떨어지는 숫자 배열 본문
알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12910
내가 작성한 코드
0으로 나눌 경우를 생각해서 ArithmeticException 처리를 했다. 배열은 생성할 때 사이즈부터 정하고 들어가야 해서 사이즈가 얼마나 될지 가늠하기 어려울 때 쓰기 번거롭다. 담을 수량 생각하지 않고 막 담는 바구니로는 ArrayList가 짱인 것 같다. 다만 answer을 반환할 때 int[] 배열로 반환하므로 ArrayList<Integer>의 원소를 int형으로 캐스팅해서 int[] 배열에 담아줘야 한다. 그리고 그 배열을 정렬.
import java.util.Arrays;
import java.util.ArrayList;
class Solution {
public int[] solution(int[] arr, int divisor) {
ArrayList<Integer> dvList = new ArrayList<>();
boolean check = false;
try{
for(int i = 0; i < arr.length; i++){
if(arr[i] % divisor == 0){
dvList.add(arr[i]);
check = true;
}
}
if(check == false){
int[] answer = {-1};
return answer;
}
}catch(ArithmeticException e){
}
int[] answer = new int[dvList.size()];
int i = 0;
for(Integer d : dvList){
answer[i++] = (int)d;
}
Arrays.sort(answer);
return answer;
}
}
다른 사람들의 코드를 보다 보면 람다식을 쓰는 경우를 많이 보게 되는데 람다식은 자바8부터 도입되었다고 한다. 지금 배우고 있는 커리큘럼에서는 람다식을 배우지 않아서 람다식에 대해서는 개인적으로 따로 시간을 내서 공부해야 할 것 같다.
람다식에 대해서 서치하다가 아래와 같은 글을 봤다. 람다식은 간편하지만 남발하기보다는 경우에 따라 필요한 경우에만 쓰는 것이 적합할 듯하다.(특히 루프 돌릴 때는 람다식이 느린 듯)