https://school.programmers.co.kr/learn/courses/30/lessons/42839#
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <cmath>
#include <numeric>
using namespace std;
// 순열
void permutation(string& numbers, set<int>& s, string str, int r) {
if (!str.empty()) s.emplace(stoi(str));
if (r == numbers.length()) return;
for (size_t i = r; i < numbers.length(); ++i)
{
::swap(numbers[i], numbers[r]);
permutation(numbers, s, str + numbers[r], r + 1);
::swap(numbers[i], numbers[r]);
}
}
// 소수 판별
bool isprime(int n)
{
if (n <= 1) return false;
for (int i = 2; i <= sqrtf(n); ++i)
if (n % i == 0) return false;
return true;
}
int solution(string numbers) {
set<int> s;
permutation(numbers, s, "", 0);
return ::accumulate(s.begin(), s.end(), 0, [](const auto& acc, const auto& n) {
return acc + (isprime(n) ? 1 : 0);
});
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] Lv 2. 택배상자 (0) | 2023.07.26 |
---|---|
[Programmers] (월간 코드 챌린지 시즌1) Lv 2. 쿼드압축 후 개수 세기 (0) | 2023.07.25 |
[Programmers] (정렬) Lv 2. 가장 큰 수 (0) | 2023.07.24 |
[Programmers] (스택/큐) Lv 2. 다리를 지나는 트럭 (0) | 2023.07.23 |
[Programmers] Lv 2. 롤케이크 자르기 (0) | 2023.07.21 |
댓글