https://school.programmers.co.kr/learn/courses/30/lessons/12977
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
| nums | result |
|---|---|
| [1,2,3,4] | 1 |
| [1,2,7,6,4] | 4 |
필요한 자료구조 : 배열
1. 조합을 이용해 입력값 중 3개를 뽑는다
2. 뽑은 3개의 숫자를 더한 후
3. 소수인지 판별하고 소수이면 count 변수를 증가시켜준다
class Solution {
static int count = 0;
public int solution(int[] nums) {
boolean[] visited = new boolean[nums.length];
comb(nums,visited,0,3);
return count;
}
static void comb(int[] arr, boolean[] visited, int start, int r) {
if(r == 0) {
int num = 0;
for(int i=0;i<arr.length;i++){
if(visited[i] == true){
num+=arr[i];
}
}
isPrime(num);
return;
} else {
for(int i = start; i < arr.length; i++) {
visited[i] = true;
comb(arr, visited, i + 1, r - 1);
visited[i] = false;
}
}
}
static void isPrime(int num){
if(num < 2) return;
if(num == 2) return;
for(int i = 2; i <= Math.sqrt(num); i++) if(num % i == 0) return;
count++;
return;
}
}

잘 읽었습니다. 좋은 정보 감사드립니다.