문제풀이/프로그래머스

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

Hyeon-Uk 2021. 6. 7. 23:38
반응형

https://programmers.co.kr/learn/courses/30/lessons/12977

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr


 

-풀이-

먼저 dfs를 이용하여 3종류의 숫자의 합을 만든다. 그런 뒤, 만들어진 합의 소수판별여부를 확인하여 answer를 갱신한다.

 

-코드-

#include <vector>
#include<cmath>
#include <iostream>
using namespace std;
int answer=0;

bool check(int n){
    for(int i=2;i<=sqrt(n);i++){
       if(n%i==0){
           return false;
       } 
    }
    return true;
}

void dfs(int now,int sum,int cnt,vector<int>& nums){
    if(cnt==3){
        if(check(sum)) answer++;
        return;
    }
    for(int i=now+1;i<nums.size();i++){
        dfs(i,sum+nums[i],cnt+1,nums);
    }
}

int solution(vector<int> nums) {
    dfs(-1,0,0,nums);
    return answer;
}
반응형