https://school.programmers.co.kr/learn/courses/30/lessons/92335
이 문제의 제한사항을 보면 1 <= n <= 1,000,000이다.
이것을 진수로 바꾸면 자릿수가 더 늘어나므로 int 형으로 다룰 수 없다!
따라서 이 문제의 예외 케이스는 long으로 변환하는 것이다!(parseLong이 생각안났음...)
코드
다른 사람들의 코드가 더 간결해서 첨부한다.
import java.util.*;
class Solution {
public int solution(int n, int k) {
int answer = 0;
String[] temp = Integer.toString(n, k).split("0"); // 진수로 바꾸고, 0으로 나눈다.
for(String t : temp) {
if(t.length() == 0) continue;
long a = Long.parseLong(t);
if(a == 1) continue;
boolean isPrime = true;
// 소수 판별한다. 제곱근까지만 확인하면 된다. 전체 확인하면 시간초과 발생!
for(int i = 2; i <= Math.sqrt(a); i++) {
if(a % i == 0) {
isPrime = false;
break;
}
}
}
return answer;
}
}
반응형