Coding_Test 연습/Programmers

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

Codetesing 2022. 5. 23. 19:03

크게 어렵진 않았다.

소수 판별은 하던대로 했고, DFS로 숫자를 만들어주었다.

다만 중복제거를 위해 vector를 사용해 모두 저장한 후 중복삭제했다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> prime;
string n;
bool visited[10] = { false };

bool IS_PRIME(int n)
{
    if (n < 2)
        return false;

    if (n == 2 || n == 3)
        return true;

    for (int i = 2; i * i <= n; i++)
        if (n % i == 0)
            return false;

    return true;
}

void DFS(int ind, int cnt, string cur)
{
    visited[ind] = true;

    if (IS_PRIME(stoi(cur)))
        prime.push_back(stoi(cur));

    for (int i = 0; i < n.size(); i++)
        if (!visited[i])
            DFS(i, cnt + 1, cur + n[i]);
    visited[ind] = false;
}

int solution(string numbers) {
    int answer = 0;
    n = numbers;

    for (int i = 0; i < numbers.size(); i++)
        DFS(i, 1, to_string(numbers[i] - '0'));

    sort(prime.begin(), prime.end());
    prime.erase(unique(prime.begin(), prime.end()), prime.end());

    answer = prime.size();

    return answer;
}