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

jiyehyeon·2022년 6월 16일
0

문제: 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

profile
https://github.com/jiyehyeon

0개의 댓글