https://school.programmers.co.kr/learn/courses/30/lessons/42839
#include <string>
#include <vector>
#include <set>
using namespace std;
set<int> numberSet;
int isPrime(int number)
{
if (number == 1) return 0;
if (number == 2) return 1;
if (number % 2 == 0) return 0;
for(int i = 3; i*i <= number; i++)
{
if (number % i == 0) return 0;
}
return 1;
}
void Combi(string comb, string others)
{
if (comb != "")
numberSet.insert(stoi(comb));
for (int i = 0; i < others.size(); i++)
Combi(comb + others[i], others.substr(0, i) + others.substr(i + 1));
}
int solution(string numbers) {
Combi("", numbers);
int answer = 0;
for (int number : numberSet)
if (isPrime(number))
answer++;
return answer;
}
소수 찾는 거는 예전 강의에서 한 번 배웠어서
에라토스테네스의 채 방법으로 저걸 그냥 외워버려서 썼다
콤비네이션 코드를 두 개 외워났는데
void combi(int start, vector<int> b){
if(b.size() == k){
/* 길이가 k인것에 대한 행동 */
return;
}
for(int i = start + 1; i < n; i++){
b.push_back(i);
combi(i, b);
b.pop_back();
}
}
요거랑
void Combi(string comb, string others)
{
if (comb != "")
numberSet.insert(stoi(comb));
for (int i = 0; i < others.size(); i++)
Combi(comb + others[i], others.substr(0, i) + others.substr(i + 1));
}
요거를 외워놨다
아무튼 너 콤비네이션 할 줄 알아? 하는 문제였던 것 같다
1트!