LV2. 소수만들기
August 27, 2019
문제 설명 및 제한 조건
내 풀이
class Solution {
public int solution(int[] nums) {
int answer = 0;
List<Integer> list = new ArrayList<>();
combination(nums, 3, list);
for(int i : list) {
if(checkPrimeNumber(i)) answer ++;
}
return answer;
}
public static boolean checkPrimeNumber(int number) {
for (int i=2; i<number/2; i++) {
if(number % i == 0) return false;
}
return true;
}
public static int combination(int[] arr, int destNum, List<Integer> list) {
int[] temp = new int[destNum];
return combination(arr,0,destNum,temp, list);
}
public static int combination(int[] arr, int curLoc, int destNum, int[] temp, List<Integer> list) {
int sum = 0;
if(destNum==0) {
for(int i = 0; i < temp.length; i++) {
sum += arr[temp[i]];
}
list.add(sum);
return sum;
}
for(int i = curLoc; i < arr.length; i++) {
temp[temp.length-destNum] = i;
combination(arr,i+1,destNum-1, temp, list);
}
return sum;
}
}
- 재귀함수 사용해서 경우의 수 조합(Combination)
- 배열의 합을 리스트로 담아놓고
- 소수 판별 후 카운트
- 소수 판별 시간복잡도 줄이기(에라토스테네스의 체)