프로그래머스 코딩테스트 연습: 나누어 떨어지는 숫자 배열

728x90

Q. 나누어 떨어지는 숫자 배열

접근 방법 : 나머지(%)의 개념만 잘 안다면 크게 어렵지 않은 문제라고 생각하였다.

풀이 방법 1) 흔한 방식으로 ArrayList를 사용

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

public class Solution {

    public static int[] solution(int[] arr, int divisor) {

        Arrays.sort(arr); //오름차순으로 정렬

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

        /**
         * arr의 배열의 각 원소가 divisor의 배수인 것만 list에 저장
         */
        for(int a : arr){
            if(a % divisor == 0){
                list.add(a);
            }
        }

        //ArrayList에 아무값이 없더라도 null은 아니다. (크기는 0)
        System.out.println("크기" + list.size());
        if(list.size() == 0)
            list.add(-1);


        int[] answer = new int[list.size()];
        int cnt = 0;
        for(int a : list ){
            answer[cnt++] = a;
        }

        return answer;
    }
 }

 

풀이 방법 2)   stream의 filter 기능을 이용하여 간단하게 구현하였다.  (프로그래머스 다른 사람들의 풀이 가장 상단에 위치) 

import java.util.Arrays;

class Divisible {
    public int[] divisible(int[] array, int divisor) {
        return Arrays.stream(array).filter(factor -> factor % divisor == 0).toArray();
    }
}

 

꽤 오래된 Java책으로 공부를 하다 보니 Java8 버전에서 새로 추가된 스트림(Stream)이 책 내용에 없었다. 

이전에도 어떤 문제풀이를 스트림으로 간단하게 해결하는 풀이를 본 적이 있었는데, 그때는 Java 자체가 너무 익숙지 않은 상황이라 도저히 스트림을 공부할 엄두가 안 났다. 하지만 이제는 조금 Java가 익숙해졌으니(아직 한참 멀었지만!!!)  스트림을 공부해야겠다고 생각했다. 주말에 스트림 공부를 진행하고 블로그에 요약해서 글을 올려볼까 한다.

728x90