최대 1 분 소요

Question

Q Q2


Solution

  • 우선 주어진 n을 k진수로 변환 한다.
  • 위 과정에서 string으로 넣어준다. 맨 처음 초기화시 “0”을 넣어준 상태로 한다.
  • for루프로 ‘0’이 아니면 string temp에 넣어주고 ‘0’이 나오면 temp에 대해 소수 판별을 한다.
  • 주의! 소수 판별시 숫자가 int의 범위를 초과할 수 있어 long long으로 해주어야 한다.

Cord

#include <string>
#include <algorithm>

using namespace std;

// 소수인지 판별
bool isPrimeNum(long long num)
{
    if (num == 1) { return false; }

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

    return true;
}

int solution(int n, int k)
{
    int answer = 0;

    // n을 k진수로 변환
    string strNum = "0";    // 마지막 '0' 처리를 위해 추가
    while (n / k > 0)
    {
        strNum += (n % k + '0');
        n /= k;
    }
    strNum += n + '0';
    reverse(strNum.begin(), strNum.end());

    // 소수 탐색
    string primeNum;
    for (int i = 0; i < strNum.size(); ++i)
    {
        if (strNum[i] != '0') { primeNum += strNum[i]; }
        else
        {
            if (primeNum == "") { continue; }

            if (isPrimeNum(stoll(primeNum))) { ++answer; };
            primeNum = "";
        }
    }

    return answer;
}

Result

Result