[프로그래머스] 소인수분해 - Java

Yunki Kim·2022년 12월 28일
1

프로그래머스

목록 보기
50/101

문제


링크


코드

풀이 1.

import java.util.HashSet;

class Solution {
    public int[] solution(int n) {
        HashSet<Integer> set = new HashSet<>();
        for (int i = 2; i <= n; i++) {
            while (n % i == 0) {
                set.add(i);
                n /= i;
            }
        }
        if (n != 1) set.add(n);

        return set.stream().mapToInt(Integer::intValue).sorted().toArray();
    }
}

풀이 2.

import java.util.LinkedHashSet;

class Solution {
    public int[] solution(int n) {
        LinkedHashSet<Integer> set = new LinkedHashSet<>();
        for (int i = 2; i <= Math.sqrt(n); i++) {
            while (n % i == 0) {
                set.add(i);
                n /= i;
            }
        }
        if (n != 1) set.add(n);

        return set.stream().mapToInt(Integer::intValue).toArray();
    }
}

리뷰

평소에 잘 사용하지 않던 HashSet과 LinkedHashSet을 사용해보게되었다.

Java doc - HashSet
Java doc - LinkedHashSet

둘다 set을 구현한 클래스로 거의 비슷하지만 차이점이라고 한다면
HashSet은 삽입 순서를 보장하지 않지만 LinkedHashSet은 삽입 순서를 보장한다.

그래서 둘의 풀이에서 반환하는 과정에서 HashSet은 sorted를 이용해 정렬을 해주었다.

둘의 속도를 비교해보고싶었는데 실수로 풀이 1번에서는 제곱근까지 판별하려던 것을 오류를 잡다가 n으로 잠깐 바꾸었는데 테스트가 통과되었다 😅

0개의 댓글