풀이 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으로 잠깐 바꾸었는데 테스트가 통과되었다 😅