개발하는 kim-hasa

[c++][프로그래머스] 소수 만들기 본문

Algorithm/Programmers(c++)

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

kim-hasa 2021. 7. 28. 21:14

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

 

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

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

programmers.co.kr

주어진 숫자 중 3개를 더해서 소수인지 아닌지를 판별하는 프로그램입니다.

 

3개 더하는 것을 3중 for문으로 해결했습니다.

 

그 이후에 소수를 판별해서 정답을 출력합니다.

 

#include <vector>
#include <iostream>
using namespace std;

int solution(vector<int> nums) {
    int answer = 0;
    int len = nums.size();  // 들어온 숫자의 갯수
    vector<int> sum;        // 합을 더해서 넣은 배열
    int sum3 = 0;           // 세 숫자를 더할 변수
    
    for(int i=0; i<len; i++)
    {
        for(int j=i+1; j<len; j++)
        {
            for(int k=j+1; k<len; k++)
            {
                sum3 = nums[i] + nums[j] + nums[k];
                sum.push_back(sum3);
                int sum3 = 0;                  // 세 수를 더해서 벡터에 넣습니다.
            }
        }
    }
    
    for(int i=0; i<sum.size(); i++)
    {
        int sosu = sum[i];
        int sosucount = 0;
        
        for(int j = 2; j <= sosu/2; j++)    // 한 수씩 돌아가면서 소수 검사를 합니다.
        {
            if(sosu%j == 0)     // 소수가 아니라면 카운트를 1로 바꾸고 break
            {
                sosucount = 1;
                break;
            }
        }
        
        if(sosucount == 0)  // 소수라면 정답의 갯수를 늘립니다.
        {
            answer++;
        }
    }
    return answer;
}

※ 코드가 지저분할 수 있습니다.