알고리즘/C++

[C++] 프로그래머스 소수 만들기

지휘리릭 2020. 3. 9. 15:38
#include <vector>

using namespace std;

int answer = 0;
vector<int> value;

void dfs(int index, int sum, int level){
    if(level == 3){
        int flag = 0;
        for(int i = 2; i*i<=sum; i++){
            if(sum%i == 0) {
                flag = 1;
                break;
            }
        }
        if(flag == 0) answer += 1;
        return;
    }
    if(index == value.size()) return;
    else{
        dfs(index + 1, sum + value[index], level + 1);
        dfs(index + 1, sum, level);
    }
}

int solution(vector<int> nums) {
    value = nums;
    dfs(0, 0, 0);
    return answer;
}

에라토스테네스의 채를 사용해야할까 하다가 어차피 최대 값이 3000이므로 그냥 for문을 돌렸다.

소수 문제는 정말 자주 나오지만 나올 때마다 헷갈린다. 그렇지만 점점 적응하고 있는 것 같아서 뿌듯하다.