본문 바로가기
알고리즘

[알고리즘] cpp 소수 찾기

by keel_im 2020. 9. 23.
반응형

포인트

1. 문자열 -> 숫자

2. 10*일의 자리 10*일의 자리

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool chk(int n) {
    if (n >= 2) {
        for (int i = 2; i * i <= n; i++) { // 에라토네스 체 가능
            if (n % i == 0) return false;
        }
        return true;
    } else return false;
}

int solution(string numbers) {
    int answer = 0;
    vector<int> v;

    for (char number : numbers) {
        v.push_back(number - '0');
    }

    sort(v.begin(), v.end());
    vector<int> ans;
    // 모든 경우의 수 찾기
    do {
        for (int i = 0; i <= v.size(); i++) {
            int tmp = 0;
            for (int j = 0; j < i; j++) { //10을 곱하고 1의 자리 추가
                tmp = (tmp * 10) + v[j];
                ans.push_back(tmp);
            }
        }
    } while (next_permutation(v.begin(), v.end()));

    // 중복된 vector값 제외
    sort(ans.begin(), ans.end());
    ans.erase(unique(ans.begin(), ans.end()), ans.end()); // 정렬을 해야 사용가능하다.

    // 소수 찾기
    for (auto ele : ans) {
        if (chk(ele)) answer += 1;
    }

    return answer;
}
반응형

'알고리즘' 카테고리의 다른 글

[알고리즘] 최댓값과 최솟값  (0) 2020.09.23
[알고리즘] 구명 보트  (0) 2020.09.23
[알고리즘] c++ cpp 카카오 프렌즈 컬러링 북  (0) 2020.09.23
[알고리즘] 기능 개발  (0) 2020.09.23
[알고리즘] 프린터  (0) 2020.09.23

댓글