본문 바로가기
Algorithm/Programmers

[Programmers] Lv.0 / 약수 구하기 / Java

by unknownomad 2024. 6. 19.

문제

 

풀이

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public int[] solution(int n) {
        
        ArrayList<Integer> divisors = new ArrayList<>();
        
        for(int i = 1; i <= Math.sqrt(n); i++) {
            if(n % i == 0) {
                divisors.add(i);
                if(i != (n / i)) {
                    divisors.add(n / i);
                }
            }
        }
        Collections.sort(divisors);
        
        int[] result = new int[divisors.size()];
        for(int i = 0; i < divisors.size(); i++) {
            result[i] = divisors.get(i);
        }
        return result;
    }
}
import java.util.List;
import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        
        List<Integer> answer = new ArrayList<>();
        
        for(int i = 1; i <= n; i++) {
            if(n % i == 0) {
                answer.add(i);
            }
        }
        // List -> int[]
        return answer.stream()
            .mapToInt(x -> x)
            .toArray();
    }
}
import java.util.stream.IntStream;
import java.util.Arrays;

class Solution {
    public int[] solution(int n) {        
        return IntStream.rangeClosed(1, n)
            .filter(i -> n % i == 0)
            .toArray();
    }
}
  • 세 번째 코드가 가장 메모리 효율적
  • IntStream 을 사용하여 직접 배열로 변환하는 방법은 추가적인 메모리 할당 없이도 원하는 기능을 수행할 수 있음
  • 메모리 사용 측면에서 좋은 선택
  • 첫 번째 코드는 중간에 정렬을 수행하기 때문에 메모리와 시간이 더 많이 소모될 수 있음

 

출처

https://school.programmers.co.kr/learn/courses/30/lessons/120897

댓글