[Programmers] Level2 : k진수에서 소수 개수 구하기
Question
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;
}