[프로그래머스] 약수 구하기 - Java

Yunki Kim·2023년 1월 2일
0

프로그래머스

목록 보기
62/101

문제


링크


코드

풀이 1.

import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> answerList = new ArrayList<>();
        for (int i = 1; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                answerList.add(i);
                if (n / i != i) answerList.add(n / i);
            }
        }
        return answerList.stream()
                .mapToInt(i -> i)
                .sorted()
                .toArray();
    }
}

풀이 2.

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int n) {
        return IntStream.rangeClosed(1, n).filter(i -> (n % i == 0)).toArray();
    }
}

리뷰

풀이 1은 제곱근의 값 까지만 반복하기, 약수의 반대수 추가
(예를 들어, 100의 경우 1-100, 2-50 처럼 앞의 약수를 알면 반대의 큰 약수를 구할 수 있다)
로 최대한 반복횟수를 줄이며 모든 약수를 찾을 수 있게 구현하였다.
그리고 정렬을 통해 순서대로 출력할 수 있게 하였고

풀이 2는 단순하게 스트림을 이용하여 filter를 통해 약수의 조건에 해당하면 배열에 추가하도록하였다.

어느 방식이 효율적인지, 조금 더 나은 성능을 보여주는지는 잘 모르겠다.
그런점이 알고리즘 문제의 매력이자 헷갈리는 점이 아닐까 싶다.

0개의 댓글