https://programmers.co.kr/learn/courses/30/lessons/92335

 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

 

1. n을 k진수로 변환 (string) : result(변환 후의 값)

2. reverse() 로 result를 뒤집은 후 끝에 '0' 삽입

3. for문으로 하나씩 탐색하면서 연결된 숫자들이 소수인지 판별

4. 소수라면 cnt++

5. 지금까지 탐색한 수를 erase로 지우고 반복

 

bool isPrime(long long num) {
    if(num < 2) return false;
    for(int i=2; i<=sqrt(num); ++i)
        if(num % i == 0) return false;
    return true;
}

int solution(int n, int k) {

	int t=1, num =1;
	int x=0, cnt = 0;
	long long val = 0;
	string result = "";

	while (t <= n)
		t *= k;
	do {
		t /= k;
		num = n / t;
		result += to_string(num);
		n -= num * t;
	} while (t>= k);


	reverse(result.begin(), result.end());
	result += '0';

	for (long long i = 0; i < result.size();++i) {
		if (result[i] == '0') {
			if (isPrime(val))
				cnt++;
			result.erase(0, i + 1);
			i = -1;
			val = 0;
		}
		else
			val = val + pow(10, i) * (result[i] - '0');
	}
	return cnt;
}

+ Recent posts