개발일기

[Javascript] 소인수분해 본문

Algorithm

[Javascript] 소인수분해

황대성 2024. 7. 15. 01:54
문제 설명

 

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 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]

 

풀이
function solution(n) {
    var answer = [];
    let num = n;
    let i = 2;
    
    while (num > 1) {
        if (num % i === 0) {
            num = num / i;
            answer.push(i);
        } else {
            i++;
        }
    }
   
    return answer.filter((item, index) => answer.indexOf(item) === index);
}

 

풀이 설명

 

1. 먼저 소인수분해 값을 구하기 위해 while문을 사용하여 num의 값이 나눌수 없는 값이 될 때 까지 반복한다. (i의 값은 나눌 수 있는 최소 값이 2로 한다)

2. num의 값을 i로 나누었을 때 나머지가 0이 된다면 num의 값에 num을 i로 나눈 값을 할당하고, i의 값을 answer 배열에 push()한다. 만약 i의 값으로 나누었을 때 나머지가 0이 되지 않는다면 i에 +1을 해준다.

3. while문이 종료되면 소인수분해값이 answer이라는 배열에 담기는데, filter()와 indexOf()메서드를 사용하여 중복된 값을 없애준 후 리턴한다. 

'Algorithm' 카테고리의 다른 글

[JavaScript] 문자열 계산하기  (0) 2024.07.16
[JavaScript] 컨트롤 제트  (5) 2024.07.15
[JavaSciprt] 잘라서 배열로 저장하기  (0) 2024.07.15
[JavaScript] k의 개수  (0) 2024.07.11
[JavaScript] 7의 개수  (0) 2024.07.11