티스토리 뷰

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

vector<int> value;
vector<int> check;
vector<int> primeArr;

void dfs(int level, int res){
    if(level == value.size()) {
        if(res == 0 || res == 1) return;
        primeArr.push_back(res);
    }
    else{
        dfs(level+1, res);
        for(int i = 0; i < value.size(); i++){
            if(check[i] == 0){
                check[i] = 1;
                dfs(level+1, res*10 + value[i]);
                check[i] = 0;
            }
        }
    }
}

int solution(string numbers) {
    int i, j, answer = 0, flag = 0;
    for(i =0; i < numbers.length(); i++) {
        value.push_back(numbers[i] - 48);
        check.push_back(0);
    }
    
    dfs(0, 0);

    sort(primeArr.begin(), primeArr.end());
    primeArr.erase(unique(primeArr.begin(), primeArr.end()),primeArr.end());
    
    for(i=0;i<primeArr.size(); i++){
        flag = 0;
        for(j=2; j*j <= primeArr[i] ; j++){
            if(primeArr[i]%j == 0) {
                flag = 1;
                break;
            }
        }
        if(flag == 0) {
            answer+=1;
        }
    }
    
    return answer;
}

 

뭔가 DFS랑 소수찾기랑 섞여서 나름 할 만 했다.

unique 함수를 쓰면 그냥 중복되는 요소가 뒤로 갈 뿐이지 삭제되지는 않는다.

그렇기 때문에 erase 함수를 사용하여 반드시 중복되는 요소를 삭제해야한다.

 

댓글