문제: https://programmers.co.kr/learn/courses/30/lessons/12977
#include <vector>
#include <numeric>
#include <iostream>
#include <cmath>
using namespace std;
int answer=0;
bool isPrime(int n) {
for (int i = 2; i <= sqrt(n); i++) {
if (n%i == 0) {
return false;
}
}
return true;
}
void combination(vector<int> nums, vector<int> picks, int index, int depth){
if(depth==3){
int sum=accumulate(picks.begin(), picks.end(), 0);
if (isPrime(sum)) answer++;
}
else{
for(int i=index; i<nums.size(); i++){
picks[depth]=nums[i];
combination(nums, picks, i+1, depth+1);
}
}
}
int solution(vector<int> nums) {
vector<int> picks(3);
combination(nums, picks, 0, 0);
return answer;
}
조합과 소수판별을 이용해 문제풀이
*소수 판별 알고리즘 유형과 원리에 대해서 더 공부하기
제곱(pow), 루트(sqrt)함수: https://blockdmask.tistory.com/307
소수 판별: https://khu98.tistory.com/227