Programing/Algorithm

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

리커니 2018. 5. 15.
반응형

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

 

 

나머지 연산자를 사용하여 나누어 떨어지는 경우의 값만을 새로운 배열에

담아 리턴하면 되는 문제 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
 
class Divisible {
    public int[] divisible(int[] array, int divisor) {
        //ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.
        List<Integer> list = new ArrayList<>();
        for(int i=0; i<array.length; i++){
            if(array[i]%divisor==0){
                list.add(array[i]);
            }
        } 
        int[] ret = new int[list.size()];
        for(int j=0; j<list.size(); j++){
            ret[j] = list.get(j);
        }        
        return ret;
    }
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        Divisible div = new Divisible();
        int[] array = {59710};
        System.out.println( Arrays.toString( div.divisible(array, 5) ));
    }
}
cs

 

두번의 반복문을 사용하였는데요.

ArrayList를 만들어 나머지가 0인 것 들을 추가하고

그 ArrayList의 크기만큼의 배열을 생성하여 ArrayList의 값을 배열에 넣어 리턴하였습니다.

 

역시나 대부분의 분들이 2번의 반복문을 사용하여 처리하셨더군요..

하지만 단 1줄로 처리한 분도 있었습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 = {59710};
        System.out.println( Arrays.toString( div.divisible(array, 5) ));
    }
}
cs

 

람다식을 사용하여 처리하신 건데 어떻게 처리된건지 보도록 하죠.

 

Java8 에서는 컬렉션 프레임워크에 새롭게 Stream 인터페이스가 추가되었습니다. (위 코드는 Java8 이상에서만 동작한다는 말입니다.)

Stream을 사용하면 컬렉션의 요소에 대한 변환, 필터링, 집계의 처리를 람다식을 사용하여 간결하게 사용할 수 있고, 컬렉션에 대한 조작을 병렬화할 수 있어, 처리를 쉽고 빠르게할 가능성이 있습니다.

 

 

 

그럼 위 코드를 뜯어보도록 하죠.

Arrays.stream(array)  <== array 배열로 부터 스크림을 얻습니다. 배열이 int형이니 IntStream을 얻습니다.

.filter() <== Stream의 filter 메소드를 사용하여 스트림의 요소를 지정하는 조건으로 필터링 합니다.

조건은 factor -> factor % divisor == 0 입니다. factor는 배열의 요소를 나타내고 나머지 함수를 사용하여 나머지가 0인 것 들만 필터링 하겠다는 말이죠.

마지막으로 toArray() 메소드를 사용해 배열로 리턴하는 것입니다.

 

알고리즘에 관심을 갖을 수록 느끼는 것이 많아지는 것 같습니다.

관심을 갖는다는 것, 관심에서 느끼는 것이 있고 배우는 것이 있으니 선순환이네요 ㅎ

화이팅 해야겠습니다.

 

문제 출처 : https://programmers.co.kr

반응형

댓글

💲 추천 글