-
[Java 자바] 프로그래머스 Lv 0 - 소인수분해Study/Java 2024. 10. 31. 12:23728x90반응형
목차
1. 문제 설명
728x90문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다.
예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다.
따라서 12의 소인수는 2와 3입니다.
자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.제한사항
- 2 ≤ n ≤ 10,000
2. 입출력 예시
입출력 예시
#1
12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.
#2
17은 소수입니다. 따라서 [17]을 return 해야 합니다.
#3420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.
3. 문제 풀이
반응형문제 풀이
1. 변수 m을 만들어 n 값을 넣어준다. ( answer 배열 길이를 설정하기 위한 for 문에서 원래의 n 값이 변하기 때문)
2. 변수 count를 만든다. (answer 배열 길이 설정하기 위한 변수)
3. for 문을 통해 n이 i로 나누었을 때 나머지가 없다면, n을 i로 나누어 다시 n에 넣고 count에 1을 더한다.
4. 최종 count 값을 이용하여 배열 answer의 길이를 정한다.
5. answer의 원소를 넣을 위치를 정하기 위해 변수 index를 만든다.
6. for 문을 통해 m이 i로 나누었을 때 나머지가 없다면, m을 i로 나누어 다시 m에 넣고 answer[index]에 i값을 넣고 후에 index에 1을 더한다.
7. 배열에 중복된 값이 있으므로 Array.stream을 활용하여 중복제거 후 배열로 만들어 반환한다.
import java.util.Arrays; class Solution { public int[] solution(int n) { int m = n; int count = 0; // answer 배열 길이 설정하기 위한 방법 (중복도 허용) for(int i=2; i<=n; i++){ while(n%i==0){ n = n/i; count++; } } int[] answer = new int[count]; int index = 0; // answer에 값 넣기 for(int i=2; i<=m; i++){ while(m%i==0){ m = m/i; answer[index] = i; index++; } } // Arrays.stream을 사용하여 중복제거 후 배열로 변환 return Arrays.stream(answer).distinct().toArray(); } }
메모
.distinct() : 중복된 요소를 제거한다.
.toArray() : 배열로 변환한다.
728x90반응형'Study > Java' 카테고리의 다른 글
[Java 자바] 프로그래머스 Lv 0 - 배열 원소의 길이 (0) 2024.11.01 [Java 자바] 프로그래머스 Lv 0 - 컨트롤 제트 (1) 2024.11.01 [Java 자바] 프로그래머스 Lv 0 - 숨어있는 숫자의 덧셈 (1) (0) 2024.10.31 [Java 자바] 프로그래머스 Lv 0 - 문자열 정렬하기 (1) (1) 2024.10.30 [Java 자바] 프로그래머스 Lv 0 - 모음 제거 (1) 2024.10.30