[기초 Lv.0] 소인수분해

oaksusu·2024년 1월 27일
0
post-thumbnail

오답노트 13번

1. 문제 (링크) :

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

2. 내가 푼 방법 :

  1. 소수인 정수들을 먼저 구함
  2. 소수들이 담긴 배열을 map 돌면서 n이 해당 소수로 나눠진다면 새로운 Set에 담음
function solution(n) {
    var answer = new Set();
    
    let primeNum = [];
    for (let i = 2; i <= 10000; i++) {
        if(Array(i).fill(1).every((_, idx) => (idx <= 1) || (i % idx !== 0))) primeNum.push(i);
    }

     primeNum.map(ele => {
        if (n % ele === 0) {
            answer.add(ele);
            return;
        };
    });
    return [...answer];
}

이 논리밖에 생각나지 않았는데, 이 방법을 구현하기 위해서는 시간이 오래 걸렸음

3. 괜찮아 보였던 풀이 방법 (참고할 만한 풀이):

더 간략하게 작성할 수 있는 코드였고 가독성도 좋아서 참고했으며,
참고한 풀이로 한번 더 풀어봄

function solution(n) {
    var answer = new Set();
    
    let i = 2;
    while(i <= n) {
        if (n % i === 0) {
            n /= i;
            answer.add(i);
        } else {
            i++;
        }
    }
    return [...answer];
}
profile
삐약

0개의 댓글