문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한 사항
- 2 ≤ n ≤ 10,000
풀이 코드
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;
}
}
'프로그래밍 > Algorithm' 카테고리의 다른 글
[백준 BAEKJOON] 4948번 베르트랑 공준 (0) | 2024.02.23 |
---|---|
[백준 BAEKJOON] 11653번 소인수분해 (0) | 2024.02.22 |
[백준 BAEKJOON] 1929번 소수 구하기 (1) | 2024.02.21 |
[백준 BAEKJOON] 16916번 부분 문자열 (0) | 2024.02.19 |
KMP 문자열 탐색 알고리즘 (0) | 2024.02.19 |
댓글