Coding Test/Programmers

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

peachh 2021. 1. 5. 02:29
728x90

문제 설명

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

 

제한 조건

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

 

입출력 예

nums result
[1,2,3,4] 1
[1,2,7,6,4] 4

 

 

코드

#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

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

int solution(vector<int> nums) {
    int answer = 0;
    int i;
    int cnt;
    int tmp;
    vector<int> used;
    vector<int> n;
    
    while (i < nums.size() - 3)
    {
        used.push_back(0);
        i++;
    }
    while (i < nums.size())
    {
        used.push_back(1);
        i++;
    }
    do {
        i = 0;
        cnt = 0;
        tmp = 0;
        while (cnt < 3)
        {
            if (used[i])
            {
                tmp += nums[i];
                cnt++;
            }
            i++;
        }
        answer += is_prime(tmp);
    } while (next_permutation(used.begin(), used.end()));
    
    return answer;
}

 

3개의 숫자의 합이 소수인지 판별하는 문제이므로 고르는 숫자의 순서는 상관이 없다. nums와 같은 길이의 used 배열에 0과 3개의 1을 저장한다. 이 배열에 대해 가능한 모든 순열을 구하여 used의 1과 같은 인덱스에 있는 nums의 숫자들을 가지고 합을 구하여 그 결과가 소수인지 판별한다.

 

링크

 

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

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

programmers.co.kr

 

inbdni/Programmers

Contribute to inbdni/Programmers development by creating an account on GitHub.

github.com

 

728x90