https://school.programmers.co.kr/learn/courses/30/lessons/42839
1. 순열 3P1+3P2+3P3 하는방법
do{
string s="";
for(int i=0;i<n;++i){
//cout<<v[i]<<" ";
s+=numbers[v[i]];
se.insert(stoi(s)); //for문안에서 push => 3P1,3P2,3P3차례대로 들어감!
}
//cout<<"\n";
}while(next_permutation(v.begin(),v.end()));
for문안에서 set에 넣으면된다.
ex) 0 1 2 : 0, 01, 012
0 2 1 : 0, 02, 021 ... 모든경우의수(nP1+nP2+...nPn)가 들어가게된다
2. 소수판별함수
// 소수 판별 함수
bool isPrime(int n) {
if (n < 2) return false;
// 에라토스테네스의 체
//i : 2~루트n
//약수i가 존재? -> 소수아님
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0) return false;
return true;
}
3. 순열풀이
#include <bits/stdc++.h>
using namespace std;
int is_prime[10000000],n,ret;
set<int> se;
// 소수 판별 함수
bool isPrime(int n) {
if (n < 2) return false;
// 에라토스테네스의 체
//i : 2~루트n
//약수i가 존재? -> 소수아님
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0) return false;
return true;
}
int solution(string numbers) {
n=numbers.size();
vector<int> v;
for(int i=0;i<n;++i) v.push_back(i);
do{
string s="";
for(int i=0;i<n;++i){
//cout<<v[i]<<" ";
s+=numbers[v[i]];
se.insert(stoi(s)); //for문안에서 push => 3P1,3P2,3P3차례대로 들어감!
}
//cout<<"\n";
}while(next_permutation(v.begin(),v.end()));
//cout<<"=====================\n";
for(auto i : se){
//cout<<i<<"\n";
if(isPrime(i)) ret++;
}
return ret;
}
4.dfs 풀이
#include <bits/stdc++.h>
using namespace std;
int vis[10],n,ret;
set<int> se;
// 소수 판별 함수
bool isPrime(int n) {
if (n < 2) return false;
// 에라토스테네스의 체
//i : 2~루트n
//약수i가 존재? -> 소수아님
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0) return false;
return true;
}
void dfs(string& numbers, string result){
if(result.size()){
se.insert(stoi(result));
}
for(int i=0;i<n;++i){
if(vis[i]) continue;
vis[i]=1;
dfs(numbers,result+numbers[i]);
vis[i]=0;
}
}
int solution(string numbers) {
n=numbers.size();
dfs(numbers,"");
for(auto i : se){
if(isPrime(i)) ret++;
}
return ret;
}
'Algorithm > dfs' 카테고리의 다른 글
백준 14889 스타트와링크 c++ // dfs, 사람기준으로 생각하라. 일단 모든경우의수를 벌려놓고 생각하라 (0) | 2024.03.20 |
---|---|
백준 2573 빙산 c++ // dfs, 구현, year에 대해 반복문 만들기 (0) | 2024.03.10 |
프로그래머스 미로탈출명령어 c++ // dfs 가지치기 방법, dfs중복방문 방법, dfs 시간복잡도 계산방법 (0) | 2023.12.02 |
백준 1759 암호만들기 c++ // 포함불포함 완탐 dfs, 순열시간초과 나는경우 해결 (0) | 2023.11.26 |
프로그래머스 단어변환 c++ dfs ,백트래킹 // dfs 조건있는경우 해결방법 (0) | 2023.10.18 |