Hayden's Archive

[알고리즘] 프로그래머스 : 나누어 떨어지는 숫자 배열 본문

Algorithm

[알고리즘] 프로그래머스 : 나누어 떨어지는 숫자 배열

_hayden 2020. 5. 16. 14:06

알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12910

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하�

programmers.co.kr

 

내가 작성한 코드

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부터 도입되었다고 한다. 지금 배우고 있는 커리큘럼에서는 람다식을 배우지 않아서 람다식에 대해서는 개인적으로 따로 시간을 내서 공부해야 할 것 같다.

람다식에 대해서 서치하다가 아래와 같은 글을 봤다. 람다식은 간편하지만 남발하기보다는 경우에 따라 필요한 경우에만 쓰는 것이 적합할 듯하다.(특히 루프 돌릴 때는 람다식이 느린 듯)

참고 : https://brunch.co.kr/@heracul/3