소수 한 20개 나열한 배열로 해봤는데 테스트 케이스 5~6개 정도가 실패 뜨길래 그냥 루프 돌림.
import java.util.*;
class Solution {
public int[] solution(int n) {
List<Integer> answer = new ArrayList<>();
int i = 2;
while(true) {
if(n%i==0) {
if(!answer.contains(i)) {
answer.add(i);
}
n/=i;
} else {
i++;
}
if(i>9997) break;
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
9997은 n이 가질 수 있는 최대값인 10000보다 작은 소수 중 가장 큰 수라서...
근데 자료구조를 잘 사용한 타인의 풀이를 발견해서 가져와 봤다.
import java.util.LinkedHashSet;
class Solution {
public int[] solution(int n) {
LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
int i = 2;
while (n != 0 && i <= n) {
if (n % i == 0) {
primeNumbers.add(i);
n /= i;
} else {
i++;
}
}
return primeNumbers.stream().mapToInt(Integer::intValue).toArray();
}
}
중복 값 처리를 안하나 했는데, LinkedHashSet이더라고...
자바의 큰 특징이자 장점 중 하나는 다양한 자료구조를 인터페이스와 그를 구현한 클래스로 제공한다는 것임.
그걸 잘 사용하는 게 자바를 잘 사용하는 거겠지... 난 멀었다... ㅎ....
LinkedHashSet의 특징
- 순서가 유지됨: 요소를 삽입한 순서대로 저장되며, 반복하여 접근할 때도 이 순서(인덱스)가 유지된다. = Linked
- 중복 요소 제거: 중복된 요소를 한 번만 저장한다. = Set ( Hash )
- 빠른 검색과 삽입/삭제: 해시 테이블과 연결 리스트를 통해 빠른 검색 및 삽입/삭제 작업을 지원한다. = Hash, Linked
기본적으로는 Set 인터페이스를 상속하는데, 해시 테이블을 사용해 값을 저장하고 이 요소들의 순서를 연결 리스트를 통해 유지하는 자료구조라서 세 성격을 모두 가지고 있다. ( LinkedList 방식의 버킷을 사용하는 HashSet인 것)
'Study with me > 프로그래머스 L0 마스터하기' 카테고리의 다른 글
프로그래머스 - L0 왼쪽오른쪽 (0) | 2024.04.18 |
---|---|
프로그래머스 - L0 배열만들기6 (0) | 2024.04.17 |
프로그래머스 - L0 조건에맞게수열변환하기2 (0) | 2024.04.11 |
프로그래머스 - L0 이진수더하기 (0) | 2024.04.10 |
프로그래머스 - L0 컨트롤제트 (0) | 2024.04.10 |