반응형
포인트
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 |
댓글