자바스크립트

[JavaScript] 소인수분배

코딩하는둥이 2023. 9. 18. 11:38
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

입출력 예

n result
12 [2,3]
17 [17]

 

코드 

const solution = (n) => {
    let answer = [];
    let i = 2;
    while (i <= n) {
        if (n % i === 0) {
            answer.push(i);
            n = n / i;
        } else {
            i++;
        }
    }

    return [...new Set(answer.sort((a, b) => a - b))];
}

 

풀이

소인수분해를 구해야하니 i가 n보다 작거나 같을 때 n 나누기 i가 0이라며 소인수이기 때문에 배열에 추가해주며 i로 나눈 몫을 업데이트해줍니다. 그 후 나눌 수 없다면 i를 증가 시켜 소인수를 찾습니다.

while (i <= n) {
    if (n % i === 0) {
        answer.push(i);
        n = n / i;
    } else {
        i++;
    }
}

 배열을 정렬하고 중복제거한 후 배열로 반환합니다.

return [...new Set(answer.sort((a, b) => a - b))];
더보기

new Set

 : 중복된 요소를 제거하기 위함입니다.

 

...(전개연산자)

 : set 객체를 배열로 변환합니다.