class Solution {
public int solution(int n, int k) {
int answer = 0;
StringBuilder sb = new StringBuilder();
while(n!=0){
sb.append(n%k);
n = (int)(n/k); // 한 자리수로만 나머지가 나와서 sb.reverse().toString()이 가능했다.
}
String kNum = sb.reverse().toString(); //
for(String el : kNum.split("0")){
if(el.equals("")) continue;
if(isPrime(Long.parseLong(el))) answer++;
}
return answer;
}
public boolean isPrime(long num){
if(num<2) return false;
boolean res = true;
for(int i=2; i<=Math.sqrt(num); i++){ // i*i<=num 의 연산보다 훨씬 작다
if(num%i ==0) return false;
}
return res;
}
}
배운점:
Stringbuilder sb = new StringBuilder();
sb.reverse().toString() -> 단어 뒤집기
소수 판별시: i*i<=num 보다 i<Math.sqrt(num)이 더 빠르다
10진수 n을 k진법 변환시: temp = n%k + temp, n/=k