본문 바로가기
알고리즘/프로그래머스

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

by 코리늬 2018. 4. 24.

 - 문제 

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

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


이 문제를 푸는데 divisor로 나눠지는 값을 배열에 추가하기만 하면 끝인데 그 방법을 떠올리지 못해

반복문을 한번 더 사용해서 비효율적으로 풀었다.

다른사람의 코드를 보니 비효율적인 방법을 arraylist를 사용해서 해결했다.

또 나는 배열의 크기를 필요한 만큼 받기 위해 반복문을 사용했는데 arraylist를 사용하면 동적으로 배열을 선언할 수 있기 때문에 반복문을 크게 줄일 수 있다.

Arraylist와 Linkedlist는 따로 정리를 해야겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public int[] solution(int[] arr, int n) {
        int length = arr.length;
        int count=0;
        ArrayList<Integer> list = new ArrayList<>();
        for(int i=0; i<length; i++){
            if(arr[i]%n == 0) {
                list.add(arr[i]);
            }
            else {
                count++;
                if(length == count){
                    list.add(-1);
                }
            }
        }
 
        int answer[] = new int[list.size()];
        for(int i =0; i<answer.length; i++){
            answer[i] = list.get(i);
        }
        Arrays.sort(answer);
        return answer;
    }
cs


나는 위와 같이 정답을 구하는데는 문제가 없지만 비효율적으로 풀었기 때문에 Arraylist를 사용해 효율적으로 구한 답을 보고 공부를 했다.


위 문제의 main에서 출력할 때 Arrays.toString을 사용했는데, for문 없이 배열을 출력 할 수 있게 해준다.


댓글