https://school.programmers.co.kr/learn/courses/30/lessons/92335
n을 k진수로 바꾸는 함수 생성
num이 소수인지 판별하는 함수 생성
소수 판별은 나머지 연산으로 나머지가 있으면 바로 false를 리턴해도 되는데
2와 3을 예외처리 하지 않고 해보려고 저렇게 구현해봤다.
0을 다 공백으로 바꾼 뒤 stringstream으로 파싱하였다.
처음엔 int로 해서 자꾸 오류가 났다. long long을 사용하였다.
#include <string>
#include <vector>
#include <sstream>
using namespace std;
string Change(int n, int k)
{
string s;
while(n > 0)
{
s = to_string(n%k) + s;
n /= k;
}
return s;
}
bool Check(long long num)
{
if(num == 1)
return false;
int count = 0;
for(long long i = 1; i * i <= num; i++)
{
if((num / i)*i == num)
count++;
}
return count == 1 ? true : false;
}
int solution(int n, int k) {
int answer = 0;
string s = Change(n,k);
for(int i = 0; i < s.length(); i++)
if(s[i] == '0')
s[i] = ' ';
stringstream ss;
ss.str(s);
long long num;
while(ss >> num)
answer += Check(num);
return answer;
}
#include <bits/stdc++.h>
using namespace std;
bool is_prime(long long n) {
if (n < 2) return false;
for (long long i = 2; i * i <= n; ++i) if (n % i == 0) return false;
return true;
}
int solution(int n, int k) {
string str;
while (n) {
str += n % k + 48;
n /= k;
}
reverse(str.begin(), str.end());
str += 48;
int ans = 0;
for (long long hold = 0, i = 0; i < str.size(); ++i) {
if (str[i] == '0') {
if (is_prime(hold)) ++ans;
hold = 0;
continue;
}
hold = hold * 10 + str[i] - 48;
}
return ans;
}
n을 k진수로 변환하면서 바로 string으로 변환하였다.
stringstream을 사용하지 않고 string을 순회하면서 0을 만나면 소수를 판별한다.