TIL/이전 풀이

[js] Programmers_Lv.0_소인수분해

데비시 2023. 3. 28. 09:29

문제

 

프로그래머스

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

programmers.co.kr

자연수 n의 소인수를 담은 배열을 오름차순으로 반환하시오

 

아이디어

1. 에라토스테네스의 체를 이용하여 소수를 구하자.

2. n을 소수들로 나누어서 나누어지면 answer 배열에 추가한다 ( 한 번이라도 나누어진다 = 소인수)

 

구현(풀이)

function solution(n) {
    var sieve = []
    var answer = []

	// 1. 에라토스테너스의 체 구현
    for (var i=0; i< n+1; i++) {
             sieve.push(i)     
    }
    sieve[1] = 0 

    for (var i=2; i< n+1; i++) {
        for (var j=2; j< Math.ceil(n+1/2); j++) {
                if (sieve[i*j]) {
                    sieve[i*j] = 0
                } 
            }
    }

    var sieve = sieve.filter((element) => element !== 0 );

	// 2. 소인수 찾기
    for (var j =0; j< sieve.length; j++) {
        if ((n%sieve[j]) == 0) {
            answer.push(sieve[j])
        } 
    }


    return answer;
}

 

남의 풀이

function solution(n) {
    var answer = [];

    for(let i = 2; i <= n; i++) {

        while (n % i === 0) {

            n = n / i;
            answer.push(i);

        }
    }

    return [...new Set(answer)];
}

1. n을 2부터 n까지 각 수로 나눈다. 

  - 이 때, 나누어진다면 answer에 추가한다

3. set을 통해서 중복값을 제거하고 [...set]을 통해서 Array로 형변환을 해준다.

참고문서

- mdn, Math.sqrt() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt

- mdn, Math,ceil() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil

- mdn, set : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set

- mdn, spread syntax : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax

- mdn, new : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/new