소수 찾기 / 순열, DFS

2025. 4. 24. 10:07·공부/Code Cata

https://school.programmers.co.kr/learn/courses/30/lessons/42839

numbers 문자열의 크기가 7 이하이므로 브루트포스로 문제를 해결하려고 했고, 연습삼아 next_permutation을 사용해 순열, 그리고 DFS로 두 번 풀이해보았다.
두 방법 모두, 모든 수의 조합을 시도하며 각 수가 소수인지 판단하여 unordered_set에 넣어 중복된 숫자를 제거하였다.

 

✅ 순열을 이용한 풀이

#include <string>
#include <vector>
#include <unordered_set>
#include <cmath>
#include <algorithm>

using namespace std;

bool isprimenum(const string& str)
{
    int num = stoi(str);

    for (int i = 2; i <= sqrt(num); ++i)
    {
        if (num % i == 0) return false;
    }

    return true;
}

int solution(string numbers)
{
    unordered_set<int> prime_num;
    sort(numbers.begin(), numbers.end());

    do
    {
        for (int len = 1; len <= numbers.length(); ++len)
        {
            string str = numbers.substr(0, len);

            if (stoi(str) < 2) continue;

            if (prime_num.find(stoi(str)) == prime_num.end())
            {
                if (isprimenum(str)) prime_num.insert(stoi(str));
            }
        }
    } while (next_permutation(numbers.begin(), numbers.end()));

    return prime_num.size();
}

 

✅ DFS를 이용한 풀이

#include <string>
#include <vector>
#include <unordered_set>
#include <cmath>

using namespace std;

bool isprimenum(const string& str)
{
    int num = stoi(str);

    if (num < 2) return false;

    for (int i = 2; i <= sqrt(num); ++i)
    {
        if (num % i == 0) return false;
    }

    return true;
}

void DFS(const string& numbers, string str, unordered_set<int>& prime_num, vector<bool>& used)
{
    if (!str.empty())
    {
        if (isprimenum(str)) prime_num.insert(stoi(str));
    }

    for (int i = 0; i < numbers.length(); ++i)
    {
        if (used[i]) continue;

        used[i] = true;
        DFS(numbers, str + numbers[i], prime_num, used);
        used[i] = false;
    }
}

int solution(string numbers)
{
    unordered_set<int> prime_num;
    vector<bool> used(numbers.length(), false);

    DFS(numbers, "", prime_num, used);

    return prime_num.size();
}

'공부 > Code Cata' 카테고리의 다른 글

택배 상자 / stack  (0) 2025.04.24
쿼드압축 후 개수 세기 / 재귀  (0) 2025.04.24
가장 큰 수 / 정렬  (0) 2025.04.23
다리를 지나는 트럭 / 큐  (0) 2025.04.23
숫자 변환(BFS)  (0) 2025.04.11
'공부/Code Cata' 카테고리의 다른 글
  • 택배 상자 / stack
  • 쿼드압축 후 개수 세기 / 재귀
  • 가장 큰 수 / 정렬
  • 다리를 지나는 트럭 / 큐
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210) N
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151) N
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16) N
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    소수 찾기 / 순열, DFS
    상단으로

    티스토리툴바