꺾이지 않는 마음

[프로그래머스] Lv.0 소인수분해 JS 풀이 본문

코딩테스트 기록

[프로그래머스] Lv.0 소인수분해 JS 풀이

중요한 것은 2022. 11. 1. 02:56

🧡문제 설명

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

✨나의 풀이

💜 % 연산자와 includes() 메서드 활용

function solution(n) {
    let start = 2;
    let result = [];
    
    while(n >1) {
        if (n % start === 0) {
            n/=start;
            if (!result.includes(start))
            result.push(start);
        } else {
            start +=1
        }
    }
    
    return result;
}

 

소수는 2부터 시작한 다는 점을 생각해서 start 변수에 2를 할당하고 반복문을 통해 n을 계속 나눠주었다.

나머지가 0이 아닐 때까지 계속 나눠주었고, 만약 나머지가 0이 아니면  start를 +1 해주고 다시 나누었다.

나누어 떨어지게 하는 수는 result 배열에 저장했고, 중복저장이 안되게끔 includes 메서드를 활용하여 포함 여부를 판별했다.

 

 

 

😮다른 풀이

function solution(n) {
    let s = new Set();

    while (n%2===0) {
        n/=2;
        s.add(2);
    }

    for (let i = 3; i <= Math.sqrt(n); i++) {
        while (n%i === 0) {
            n/=i;
            s.add(i);
        }
    }

    if (n > 2) s.add(n);

    return [...s];
}

 

자바스크립트 내장 객체인 Set()을 활용한 풀이법이다.

Set 객체는 써본 적이 없어서 이 풀이를 보고 검색해 보았는데, 유일한 값을 저장하는 객체라고 한다.

즉, Set 객체 내부에는 중복된 값을 저장할 수 없다는 점을 이용하여 반복문에 사용하고 있다.

add 함수는 Set 객체에 값을 추가할 때 사용하는 내장 메서드이다.

이외에도 삭제, 포함여부 판별 등의 메서드가 있는데 이 참에 시간 내서 Set 객체 관련 포스팅을 한번 해야겠다.

 

Comments