프로그래머스 Lv.2 2022 KAKAO BLIND RECRUITMENT k진수에서 소수 개수 구하기
정수 n과 k가 매개변수로 주어지고, n을 k진수로 바꿨을 때 변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return하는 solution함수를 작성하는 문제이다.
주의해야 할 점이 두 가지 있었다.
1. 조건에 맞는 P를 찾아 문자를 숫자로 형변환할 때, long을 사용해야 하는 것
2. 소수인지 판별할 때 i*i <= n을 사용하면 테스트케이스 1번에서 시간초과가 되기 때문에 Math.sqrt()함수를 사용해야 하는 것
이었다. 1번은 금방 알아차려 수정하였지만 2번을 알아내는 데에는 시간이 조금 걸렸다.
class Solution {
public int solution(int n, int k) {
int answer = 0;
// k진수로 바꾸기
String nk = NtoK(n, k);
// 조건에 맞는 P 찾기
String[] ank = nk.split("0");
for (String snk : ank) {
if (snk.equals(""))
continue;
// 소수 개수 찾기
long lnk = Long.parseLong(snk);
if (isPrime(lnk))
answer++;
}
return answer;
}
private boolean isPrime(long n) {
if (n == 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
private String NtoK(int n, int k) { // n을 k진수로 바꾸기
String nk = "";
StringBuilder sb = new StringBuilder();
while(n != 0) {
sb.insert(0, n % k);
n = n / k;
}
nk = sb.toString();
return nk;
}
}