728x90
문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ n ≤ 10,000
입출력 예
n | result |
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합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.TreeSet;
class Solution {
public int[] solution(int n) {
int[] answer = null;
TreeSet<Integer> set = new TreeSet<>();
int i=2;
while(i<=n) {
if(n%i==0) {
n /= i;
set.add(i);
}else {
++i;
}
}
answer = new int[set.size()];
int index=0;
for(int m : set) {
answer[index] = m;
++index;
}
return answer;
}
}
|
cs |
2, 3, 5,... 소수로 계속 나누어질때까지를 n까지 반복하는데 나누어 지지 않으면 숫자를 증가시켜 다음 숫자로 만든다. 소수로 나누어야 하는데 컴퓨터는 소수인지 모르니까 1씩 증가 하면서 처리 하였다. TreeSet은 정렬을 지원하고 중복을 허용하지 않는 자료구조 이다. Set을 int 배열로 변환해 주었다. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.util.TreeSet;
class Solution {
public int[] solution(int n) {
int[] answer = null;
TreeSet<Integer> set = new TreeSet<>();
int i=2;
while(i<=n) {
if(n%i==0) {
n /= i;
set.add(i);
}else {
++i;
}
}
return set.stream().mapToInt(Integer::intValue).toArray();
}
}
|
cs |
Set을 int 배열로 변환해 주는 것을 Stream으로 바꿨다. |
728x90
'프로그래머스 코딩(자바) > Level 0' 카테고리의 다른 글
Programmers Level 0 - 컨트롤 제트 (0) | 2023.03.06 |
---|---|
Programmers Level 0 - 영어가 싫어요 (0) | 2023.03.06 |
Programmers Level 0 - 공 던지기 (0) | 2023.03.06 |
Programmers Level 0 - 이진수 더하기 (0) | 2023.03.06 |
Programmers Level 0 - 숨어있는 숫자의 덧셈 (2) (0) | 2023.03.06 |