프로그래머스/lv2

프로그래머스 : k진수에서 소수 개수 구하기 (lv2) C++

TIN9 2022. 10. 6.
반응형

 

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

using namespace std;

int solution(int n, int k) {
    int answer = 0;
    
    // 스트링을 이용해서 k진수로 변환
    string Convert = "";
    while (n > 0)
    {
        Convert += to_string(n % k);
        n /= k;
    }

    reverse(Convert.begin(), Convert.end());

    string AddString = "";

    for (char Text : Convert)
    {
        if (Text == '0')
        {
            if (!AddString.empty())
            {
                long long LNumber = stoll(AddString);

                bool Enable = true;
                
                if(LNumber < 2)
                {
                    Enable = false;
                }
                
                for (int i = 2; i <= sqrt(LNumber); ++i)
                {
                    if (LNumber % i == 0)
                    {
                        Enable = false;
                    }
                }

                if (Enable)
                    ++answer;

                AddString = "";
            }
        }
        else
        {
            AddString += Text;
        }
    }
    if (!AddString.empty())
    {
        long long LNumber = stoll(AddString);

        bool Enable = true;
                
        if(LNumber < 2)
        {
            Enable = false;
        }
        
        // 반복문 조건쪽에 계속해서 함수변환하는거 방지차원으로
        // 반복문 밖에서 계산 후 넣어줌.
        int sqrtNumb = sqrt(LNumber);

        for (int i = 2; i <= sqrtNumb; ++i)
        {
            if (LNumber % i == 0)
            {
                Enable = false;
            }
        }

        if (Enable)
            ++answer;
    }
    
    return answer;
}
반응형

댓글