본문 바로가기
프로그래밍/Algorithm

[프로그래머스 Programmers] 소인수분해

by bantomak 2024. 2. 22.

문제 설명

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

 

제한 사항

  • 2 ≤ n ≤ 10,000

 

 

프로그래머스

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

programmers.co.kr

 

 

 

풀이 코드

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution {
    public int[] solution(int n) {
        List<int> list = new List<int>();
        int total = n;

        foreach (var d in NewPrimeGenerator(total))
        {
            while (total % d == 0)
            {
                total = total / d;
                list.Add(d);
            }

            if (total <= 1)
            {
                break;
            }
        }

        return list.Distinct().ToArray();
    }
    
    static IEnumerable<int> NewPrimeGenerator(int n)
    {
        for (int i = 2; i <= n; i++)
        {
            if (isPrime(i))
            {
                yield return i;
            }
        }
    }
    
    static bool isPrime(int n)
    {
        for (int j = 2; j * j <= n; j++)
        {
            if (n % j == 0)
            {
                return false;
            }
        }

        return true;
    }
}

댓글