프로그래머스

소수 찾기

E재HO 2022. 2. 18. 12:38

#include <string>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

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

int solution(string numbers) {
    int answer = 0; 
    vector<char> v; // 종이 조각의 각 숫자 저장 
    vector<int> nums; // 종이 조각으로 만들 수 있는 모든 수 저장 

    // 퍼뮤테이션을 쓸려면 오름차순
    for (int i = 0; i < numbers.size(); i++)
        v.push_back(numbers[i]); 
    sort(v.begin(), v.end()); 
    
    do { //"17"
        string temp = ""; // 만들 수 있는 모든 숫자 nums에 저장 
        for (int i = 0; i < v.size(); i++) { 
        temp.push_back(v[i]); //first loop  1 7 second loop 7 1
        nums.push_back(stoi(temp)); //first loop 1 17 second loop 7 71
        } 
    } while (next_permutation(v.begin(), v.end()));// 7 1 로 순서 변경
    
    
    // 중복 값 삭제
    sort(nums.begin(), nums.end()); 
    nums.erase(unique(nums.begin(), nums.end()), nums.end()); 
    
    for (int i = 0; i < nums.size(); i++) // 소수일 경우 answer++ 
        if (eratestones(nums[i])) 
            answer++;

    return answer;
}