프로그래머스 - 소수찾기

phoenixKim·2021년 8월 19일
0

풀이전략

  1. 소수 구하는 식 알아야함.
  2. 순열하는 방법을 알아야함.

1번째 소스코드

#include <string>
#include <vector>
#include <algorithm>
#include <unordered_set>
#include <cmath>
using namespace std;

bool isPrime(int& inData)
{
    if(inData < 2)
        return false;
    
    for(int i = 2; i<= sqrt(inData); i++)
    {
        if(inData % i == 0)
            return false;
    }
    return true;
}


int solution(string numbers) {
    int answer = 0;
    unordered_set<int>s;
    
    do{
        int num = 0;
        for(int i = 0; i < numbers.size(); i++)
        {
            num = (numbers[i] - '0') + num * 10;
            
            //num의 값이 소수인지 확인을 하자.
            if(isPrime(num))
                s.insert(num);
        }
    }while(next_permutation(numbers.begin(), numbers.end()));
    
    answer = s.size();
    return answer;
}


=> 다른 방법을 생각해보자.

그게 아니라,,, 정렬을 안했다....

최종 소스코드 1

#include <string>
#include <vector>
#include <algorithm>
#include <unordered_set>
#include <cmath>
using namespace std;

bool isPrime(int& inData)
{
    if(inData < 2)
        return false;
    
    for(int i = 2; i<= sqrt(inData); i++)
    {
        if(inData % i == 0)
            return false;
    }
    return true;
}

int solution(string numbers) {
    int answer = 0;
    unordered_set<int>s;
    
    sort(numbers.begin(), numbers.end());
    do{
        int num = 0;
        for(int i = 0; i < numbers.size(); i++)
        {
            num = (numbers[i] - '0') + num * 10;
            
            //num = stoi(numbers.substr(0,i + 1));
            //num의 값이 소수인지 확인을 하자.
            if(isPrime(num))
                s.insert(num);
        }
    }while(next_permutation(numbers.begin(), numbers.end()));
    
    answer = s.size();
    return answer;
}

최종 소스코드 2

#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <set>
using namespace std;

bool isPrime(int num)
{
    if(num < 2)
        return false;
    
    for(int i = 2; i <= sqrt(num); i++)
    {        
        if(num % i == 0)
            return false;        
    }   
    return true;
}


int solution(string numbers) {
    int answer = 0;
    
    set<int>s;
    sort(numbers.begin(), numbers.end());
    do
    {
        int num = 0;
        for(int i = 0; i < numbers.length(); i++)
        {
            num += numbers[i] - '0';
            
            if(isPrime(num))
            {
                s.insert(num);               
            }
            num = num * 10;
        }
        
    }while(next_permutation(numbers.begin(), numbers.end()));
    
    
    answer = s.size();
    
    return answer;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보