뭐라도 배우면 기록하자

[알고리즘 문제풀이] 나누어 떨어지는 숫자 배열 본문

프로그래밍언어공부/Java

[알고리즘 문제풀이] 나누어 떨어지는 숫자 배열

무의욕자 2017. 6. 22. 15:11

문제 및 답안 출처: http://www.tryhelloworld.co.kr


문제

divisible 메소드는 int형 배열 array와 int divisor를 매개변수로 받습니다.
array의 각 element 중 divisor로 나누어 떨어지는 값만 포함하는 새로운 배열을 만들어서 반환하도록 divisible에 코드를 작성해 보세요.

예를들어 array가 {5, 9, 7, 10}이고 divisor가 5이면 {5, 10}을 리턴해야 합니다.


import java.util.Arrays;


class Divisible {

public int[] divisible(int[] array, int divisor) {

//ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.

int[] ret = new int[나누어 떨어지는 숫자의 개수];

return ret;

}

// 아래는 테스트로 출력해 보기 위한 코드입니다.

public static void main(String[] args) {

Divisible div = new Divisible();

int[] array = {5, 9, 7, 10};

System.out.println( Arrays.toString( div.divisible(array, 5) ));

}

}


나의 답

import java.util.Arrays;
import java.util.ArrayList;

class Divisible {
    public int[] divisible(int[] array, int divisor) {
    ArrayList<Integer> al = new ArrayList<>();
    for(int i : array){
      if(i % divisor == 0){
        al.add(i);
      }

    }
        //ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.
        int[] ret = new int[al.size()];
    for (int j=0; j < ret.length; j++) {
        ret[j] = al.get(j);
    }
        return ret;
    }
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        Divisible div = new Divisible();
        int[] array = {5, 9, 7, 10};
        System.out.println( Arrays.toString( div.divisible(array, 5) ));
    }
}



저는 arrayList를 사용해서 add매소드를 썼는데 다른 몇몇 분들은 나누어 떨어지는 것을 확인해서 그 갯수만큼 배열을 만들고


다시 한번 더 나누어 떨어지는 것을 확인해서 만든 배열에 해당 숫자를 집어 넣는 알고리즘도 짜셨습니다.  


다른 사람의 답

import java.util.Arrays;

class Divisible {
    public int[] divisible(int[] array, int divisor) {
        //ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.
        return Arrays.stream(array).filter(factor -> factor % divisor == 0).toArray();
    }
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        Divisible div = new Divisible();
        int[] array = {5, 9, 7, 10};
        System.out.println( Arrays.toString( div.divisible(array, 5) ));
    }
}


제 알고리즘에 비해서 참 짧네요;; 어느 정도 공부하면 저렇게 짧고 간결하게 코드를 작성할 수 있을까요. 제가 모르는 API가 많아도 너무 많은 것 같습니다. 

Comments