August 03, 2022
문제 링크: Click
01.설계
02.소스코드
02.1 진수변환하는 코드
02.2 소수판별하는 코드
02.3 0을 기준으로 숫자 분리하는 것
03.전체소스
      
  
    
구현할 것
string numberC;
while (n / k != 0) {
    numberC += numberChar[n%k];
    n /= k;
}
numberC += numberChar[n%k];
reverse(numberC.begin(), numberC.end());처음 구현한것
bool checkPrimeNumber1(long long n) {
	if (n == 0 || n == 1) return false;
	for (int i = 2; i*i <=  n; i++) {
		if (n%i == 0) return false;
	}
	return true;
}속도 훨씬 빠른 것
bool checkPrimeNumber(long long n) {
	if (n == 0 || n == 1) return false;
	for (int i = 2; i <= sqrt(n); i++) {
		if (n%i == 0) return false;
	}
	return true;
}for (int i = 0; i < numberC.size(); i++) {
if (numberC[i] == '0') {
if (num.size() == 0 ) {
continue;
}
if (checkPrimeNumber(stol(num))) answer++;
num.clear();
}
else if(numberC[i]!='0')num += numberC[i];
}#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
char numberChar[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
bool checkPrimeNumber(long long n) {
	if (n == 0 || n == 1) return false;
	for (int i = 2; i <= sqrt(n); i++) {
		if (n%i == 0) return false;
	}
	return true;
}
bool checkPrimeNumber1(long long n) {
	if (n == 0 || n == 1) return false;
	for (int i = 2; i*i <=  n; i++) {
		if (n%i == 0) return false;
	}
	return true;
}
int solution(int n, int k) {
	int answer = 0;
	string numberC;
	while (n / k != 0) {
		numberC += numberChar[n%k];
		n /= k;
	}
	numberC += numberChar[n%k];
	reverse(numberC.begin(), numberC.end());
	string num;
	for (int i = 0; i < numberC.size(); i++) {
		if (numberC[i] == '0') {
			if (num.size() == 0 ) {
				continue;
			}
			if (checkPrimeNumber(stol(num))) answer++;
			num.clear();
		}
		else if(numberC[i]!='0')num += numberC[i];
	}
	if (num.size()!=0&&checkPrimeNumber(stol(num))) answer++;
	//cout << num << endl;
	return answer;
}
int main(void) {
	cout<<solution(110011, 10);
	return 0;
}