02
10

문제

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

 

제한사항

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

코드

더보기
#include <vector>
#include <iostream>
using namespace std;

bool ischeck(int num)
{
    if (num == 0 || num == 1) return false;
    for (int i = 2; i < num / 2; i++)
    {
        if (num % 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++)
            {
                int n = nums[i] + nums[j] + nums[k];
                if (ischeck(n) == true)
                {
                    answer++;
                }
            }
        }
    }

    return answer;
}

코드 해설

먼저 solution 함수 위에 bool ischeck 함수를 하나 만들어준다. ischeck 함수에는 int 값을 받아오면 int의 값이 0이나 1인 경우와 시작 숫자가 2인 for문을 돌린다. 최대 값은 입력된 int의 값을 2로 나눈 수이다.

왜 2로 나눈 수인가? 소수인걸 확인할때, 그냥 num을 돌려도 되는데 num에서 2를 나눈 값을 넣어도 가능은 하다.

num을 i를 나눠서 몫이 0이 나오면 false로 해준다. 아니라면, true로 해준다.

 

3중 for문으로 첫번째 자리 수, 두번째 자리 수, 세 번째 자리 수를 각 번째 수를 정해준다. 그리고 int n 에 세 개의 숫자를 더한 값을 넣어준다.

ischeck에 n를 넣고 bool값을 체크한다. 만약 bool 값이 true면 answer의 값을 더해주면 소수의 개수를 구할 수 있다.

 

 

-2025.02.07-

COMMENT