728x90
문제
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ n ≤ 10,000
입출력 예
| 12 | [2, 3] |
| 17 | [17] |
| 420 | [2, 3, 5, 7] |
입출력 예 #1
- 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.
입출력 예 #2
- 17은 소수입니다. 따라서 [17]을 return 해야 합니다.
입출력 예 #3
- 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.
import java.util.*;
class Solution {
public int[] solution(int n) {
Set<Integer> hSet = new HashSet<Integer>();
int num = 2;
while(n!=1) {
if(n%num==0) {
n = n/num;
hSet.add(num);
}else{
num++;
}
}
int[] answer = new int[hSet.size()];
Iterator it = hSet.iterator();
int idx = 0;
while(it.hasNext()) {
answer[idx++] = (int) it.next();
}
Arrays.sort(answer);
return answer;
}
}
우선 소인수 값들이 중복되면 안되서 Set을 이용해서 중복을 자동으로 제거해줬다.
1은 제외이므로 num은 2부터 시작해서 만약 n이 2로도 나눠지면 num을 증가시키지 않고 다시 num으로 나누기를 반복 만약 num으로 나눠지지 않으면 그때 num을 하나 증가해서 n이 1이 될 때까지 반복했다.
set객체를 int배열로 바꿀 때 iterator를 이용했는데 stream을 사용하면 더 간단하게 바꿀 수 있으니깐 stream을 배운 후에는 stream을 사용해보자.
반응형
'CodingTest > Programmers' 카테고리의 다른 글
| [프로그래머스] Lv0 영어가 싫어요*** (0) | 2023.01.12 |
|---|---|
| [프로그래머스] Lv0 잘라서 배열로 저장하기 (0) | 2023.01.12 |
| [프로그래머스] Lv0 공 던지기* (0) | 2023.01.10 |
| [프로그래머스] Lv0 숨어있는 숫자의 덧셈 (2) (0) | 2023.01.09 |
| [프로그래머스] Lv.0 이진수 더하기** (0) | 2022.12.28 |
댓글