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;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 최소공배수 C++ (0) | 2022.06.01 |
---|---|
[프로그래머스] 주차 요금 계산 C++ (0) | 2022.05.12 |
[프로그래머스] 가장 먼 노드 C++ (bfs) (0) | 2022.05.05 |
[프로그래머스] N으로 표현 C++ (DP) (0) | 2022.05.05 |
[프로그래머스] 타겟넘버 C++ (dfs) (0) | 2022.05.05 |