공부/C++

[C++] 프로그래머스 소수 찾기

굴러다니다니 2025. 5. 2. 23:32
#include <string>
#include <vector>
#include <unordered_set>

using namespace std;
bool isPrime(int num){
    if (num < 2) return false;
    for (int i = 2; i * i <= num; i++){
        if (num % i == 0) return false;
    }
    return true;
}

int DFS(string numbers, vector<bool>& visited, string currentNum, unordered_set<int>& check){
    int count = 0;
    if(currentNum.size() > 0){
        int num = stoi(currentNum);
        if(check.find(num) == check.end() && isPrime(num)){
            check.insert(num);
            count++;
        }
    }
    for (int i = 0; i < numbers.size(); i++){
        if (!visited[i]){
            visited[i] = true;
            count += DFS(numbers, visited, currentNum + numbers[i], check);
            visited[i] = false;
        }
    }
    return count;
}

int solution(string numbers) {
    int count = 0;
    
    vector<bool> visited(numbers.size(), false);
    unordered_set<int> check;
    
    return DFS(numbers, visited, "", check);
}
728x90
반응형