PROGRAMMERS 프로그래머스 : 소수 만들기
Updated:
시작하면서
이번 문제는 구현 문제이다.
문제 아이디어
이 문제는 적힌 내용을 그대로 구현하면 되는 문제이다. 방법은 다음과 같다.
- 소수를 판단할 때마다 알고리즘을 돌리면 시간 낭비가 심하므로, 미리 리스트에 소수들을 담아둔다.
- Combination을 이용해서 nums 중에 3개씩 뽑아서 더한 후, 소수 판단을 한다. (이때 3중 for 문을 이용해도 무방)
해결
using System;
using System.Collections.Generic;
public class Solution
{
List<int> CreatePrimeNumberList(int startNumber, int endNubmer)
{
List<int> primeNumberList = new List<int>();
for (int i = startNumber; i <= endNubmer; i++)
{
primeNumberList.Add(i);
}
for (int factor = startNumber; factor <= endNubmer; factor++)
{
primeNumberList.RemoveAll(delegate (int x) { return x > factor && x % factor == 0; });
}
return primeNumberList;
}
public void Combination(ref int answer, List<int> primeNumberList, int[] nums, int[] arr, int index, int n, int r, int current)
{
if (r == 0)
{
int sumOfNumbers = nums[arr[0]] + nums[arr[1]] + nums[arr[2]];
int findIndex = primeNumberList.FindIndex(x => x == sumOfNumbers);
if (findIndex != -1)
{
answer++;
}
}
else if (n == current)
{
return;
}
else
{
arr[index] = current;
Combination(ref answer, primeNumberList, nums, arr, index + 1, n, r - 1, current + 1);
Combination(ref answer, primeNumberList, nums, arr, index, n, r, current + 1);
}
}
public int solution(int[] nums)
{
List<int> primeNumbeList = CreatePrimeNumberList(2, 3000);
int answer = 0;
int []arr = new int[3];
Combination(ref answer, primeNumbeList, nums, arr, 0, nums.Length, 3, 0);
return answer;
}
}
Leave a comment