[프로그래머스] Lv.1 나누어 떨어지는 숫자 배열 (Java)

subbni·2023년 1월 20일
0

프로그래머스

목록 보기
5/26
post-custom-banner

문제

나의 풀이

  • 주어진 arr 배열을 먼저 정렬한다.
  • divisor로 나누어 떨어지는 수들만 queue에 넣는다.
  • queue에서 하나씩 꺼내어 반환 배열에 넣는다.
import java.util.Queue;
import java.util.LinkedList;
import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        Queue<Integer> q = new LinkedList<>();

        Arrays.sort(arr);
        for(int target:  arr) {
            if(target%divisor==0) q.add(target);
        }

        if(q.isEmpty()) return new int[]{-1};
        
        int[] answer = new int[q.size()];
        int idx = 0;
        while(!q.isEmpty()) {
            answer[idx++] = q.remove();
        }

        return answer;
    }
}

다른 풀이

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

        // ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.
        ArrayList<Integer> ret = new ArrayList<>();
        for (int i = 0; i < array.length; i++) {
            if (array[i] % divisor == 0) {
                ret.add(array[i]);
            }
        }

        return ret.stream().mapToInt(i -> i).toArray();
    }
}

나는 queue를 사용했는데 list를 사용한 풀이이다.
로직 상 크게 다른 점은 없지만 내가 고민했던 'list를 int 배열로 바꾸는 법'에 대한 구현이 이루어져 있다.

  • ret.stream().mapToInt(i -> i).toArray();

이를 활용해서 내가 쓴 코드를 수정하면 다음과 같다.

import java.util.Queue;
import java.util.LinkedList;
import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        Queue<Integer> q = new LinkedList<>();

        Arrays.sort(arr);
        for(int target:  arr) {
            if(target%divisor==0) q.add(target);
        }

        if(q.isEmpty()) return new int[]{-1};
        
        return q.stream().mapToInt(i->i).toArray();
    }
}

코드 줄 수가 훅 줄어든다 !

성능도 비교해보았다.

  • for문 활용

  • 스트림 활용

메모리 사용량은 거의 비슷하고,
다만 for문을 활용하여 직접 넣어주는게 시간 면에서는 훨씬 빠른 것을 확인했다.

역시 코드 줄 수가 줄어든다고 능사가 아니여

후기

구현엔 시간이 5분도 안 걸렸지만, 다른 풀이를 보면서 람다식 + 스트림을 이용해 list를 int형 배열으로 바꾸는 법을 알아두는 게 좋을 것 같아 글을 썼다. 잘 알아두고 나중에 꼭 필요한 순간이 온다면 써먹어 보자.

profile
개발콩나물
post-custom-banner

0개의 댓글