본문 바로가기
알고리즘/문제 풀이

[Java] 프로그래머스 > 나누어 떨어지는 숫자 배열

by _eunji_ 2022. 1. 16.

https://programmers.co.kr/learn/courses/30/lessons/12910

 

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

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

programmers.co.kr

 

 

Arraylist를 만들어서 반복문을 통해 나누어 떨어지는 수를 추가하고 정렬해서 배열 크기 지정후 하나씩 대입하도록 일차원적인 생각으로 풀었다.

 

  • 내 풀이
import java.util.*;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};

        ArrayList<Integer> list= new ArrayList<>();

        for(int i=0;i<arr.length;i++){
            if(arr[i]%divisor==0) list.add(arr[i]);
        }

        Collections.sort(list);

        if(list.size()==0){
            answer=new int[1];
            answer[0]=-1;
        }
        else{
             answer=new int[list.size()];
             for(int i=0;i<list.size();i++){
                answer[i]=list.get(i);
          }
        }

        return answer;
    }
}

 

  • 다른 풀이
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;
  }
}

다른 사람 풀이를 보니 람다 형식의 함수로 간단하게 풀 수 있었다.

스트림 변환 후 filter()을 통해 필터링하고 다시 배열로 바꾸는 방식인 것 같다(?)

filter() => 조건에 따라 요소를 걸러낼 수 있는 함수

댓글