문제
문제링크
접근
- 순차적으로 진법 변환 - split - 소수 판별을 구현하면 된다.
- 모두 구현하고 채점을 하였는데, 1번 11번 테케에서 런타임오류가 났다. 이는 소수 판별 과정에서 int를 long으로 바꾸었더니 해결되었다.
- 그 다음은 1번에서 시간초과가 났는데, 이는 소수 판별과정에서 루프가 제곱근의 단위로 올라가도록하여 해결되었다.
소스코드
class Main {
public static void main(String[] args) throws Exception {
int n = 110011;
int k = 10;
Solution sol = new Solution();
System.out.println("result : " + sol.solution(n, k));
}
}
class Solution {
public int solution(int n, int k) {
int answer = 0;
int currNum = n;
String num = "";
while (currNum != 0) {
num = String.valueOf(currNum % k) + num;
currNum /= k;
}
String[] nums = num.split("0");
int numsLength = nums.length;
for (int i = 0; i < numsLength; i++) {
if (nums[i].equals("1") || nums[i].equals(""))
continue;
else if (isPrime(nums[i])) {
answer++;
}
}
return answer;
}
public static boolean isPrime(String numString) {
long num = Long.parseLong(numString);
if(num == 2) return true;
for(int i=2;i<=(int)Math.sqrt(num);i++){
if(num % i == 0){
return false;
}
}
return true;
}
}