Algorithm

프로그래머스 소수 만들기 c++

최강훈 2021. 5. 23. 17:46

https://programmers.co.kr/learn/courses/30/lessons/12977?language=cpp 

 

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

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

programmers.co.kr

 

처음에는 next_permutation 써서 unordered_set<int> 에 is_prime을 만족하는 모든 조합을 넣었다가,,,

시간초과나서 모두 틀림.

 

알고보니 3중 for문으로 아주 쉽게 해결할 수 있던 거였음 ㅠㅠ

for문 if문 모두 브라켓 없어서 너무 깔-끔-

 

#include <bits/stdc++.h>

using namespace std;

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

int solution(vector<int> nums) {
    int answer = 0;
    
    for (int i = 0; i < nums.size(); i++)
        for (int j = i + 1; j < nums.size(); j++)
            for (int k = j + 1; k < nums.size(); k++)
                if (is_prime(nums[i] + nums[k] + nums[j]))
                    answer++;
    return answer;
}