ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 소수 찾기
    문제 풀이/프로그래머스 2023. 3. 12. 15:30
    반응형

     코딩테스트 고득점 Kit 완전탐색 Level 2 문제 소수 찾기 풀이이다. 이 문제는 string 으로 주어진 0 ~ 9 까지의 숫자를 조합하여 소수가 되는 모든 경우의 수를 구하는 문제이다. 숫자가 아무리 커도 9999999 까지밖에 안되므로 전역 배열 isPrime을 선언하여 에라토스테네스의 체를 이용하여 소수를 구하고, 숫자들의 조합을 완전 탐색으로 구한 뒤 그 숫자가 소수이면 map에 저장하여 최종적으로 map.size() 를 통해 답을 구했다.

     

    #include <string>
    #include <vector>
    #include <map>
    
    using namespace std;
    
    #define MAX 9999999
    
    bool isPrime[MAX + 1];
    map<int, int> m;
    
    void makePrime()
    {
        for (int i = 2; i <= MAX; i++)
        {
            isPrime[i] = true;
        }
        
        for (int i = 2; i * i <= MAX; i++)
        {
            if (isPrime[i])
            {
                for (int j = i * i; j <= MAX; j += i)
                {
                    isPrime[j] = false;
                }
            }
        }
    }
    
    void primeDecision(int num)
    {
        if (isPrime[num])
        {
            m[num]++;
        }
    }
    
    void func(string& numbers, int index, string res, vector<bool>& used)
    {
        if (index == numbers.size())
        {
            if (res.empty())
            {
                return;
            }
            
            int temp = stoi(res);
            
            primeDecision(temp);
            
            return;
        }
        func(numbers, index + 1, res, used);
        
        for (int i = 0; i < numbers.size(); i++)
        {
            if (!used[i])
            {
                used[i] = true;
                func(numbers, index + 1, res + numbers[i], used);
                used[i] = false;
            }
        }
    }
    
    int solution(string numbers) {
        int answer = 0;
        string res = "";
        vector<bool> used(numbers.size(), false);
        
        makePrime();
        func(numbers, 0, res, used);
        
        answer = m.size();
        
        return answer;
    }
    반응형

    '문제 풀이 > 프로그래머스' 카테고리의 다른 글

    프로그래머스 - 피로도  (0) 2023.03.12
    프로그래머스 - 카펫  (0) 2023.03.12
    프로그래머스 - H-Index  (0) 2023.03.11
    프로그래머스 - 가장 큰 수  (0) 2023.03.11
    프로그래머스 - 더 맵게  (0) 2023.03.10
Designed by Tistory.