tags:
[! Todo] Title
https://school.programmers.co.kr/tryouts/71915/challenges
문제는 요약하면 n 이라는 자연수를 k 진법을 가진 수로 바꾸고 해당 수를 10진법의 소수 갯수를 구하는 것이다.
테스트 케이스 1번 과 11 번에서 오류가 발생했다.
초기에는 공백에 의한 NumberFormatException 이라고 생각해서 아래와 같은 풀이를 만들었다.
class Solution {
public static boolean isInteger(String strValue) {
try {
Integer.parseInt(strValue);
return true; } catch (NumberFormatException ex) {
return false;
}
}
public boolean isPrime(int num){
if(num == 1){
return false;
}
for (int i = 2; i < num; i++) {
if((num % i) == 0) return false;
}
return true;
}
public int solution(int n, int k) {
int answer = 0;
String kNum = Integer.toString(n,k);
StringTokenizer st = new StringTokenizer(kNum,"0");
while(st.hasMoreTokens()){
String o = st.nextToken();
long num = Integer.parseInt(o);
if(isPrime(num)) answer++;
}
return answer;
}
}
위의 함수로 구현해서 number format exception이라면 어차피 소수를 반환할것이라고 생각해서 구현했다. 하지만 정답은 아니였다. 하지만 위의 함수처럼 number format exception 으로 함수를 만들 수 있는지는 몰랐다.
한참이 지나서야 알게되었다 숫자의 범위를...
for(int i = 2; i <= Math.sqrt(v); i++)
class Solution {
public boolean isPrime(long num) {
if (num == 1) {
return false;
}
for (int i = 2; i < Math.sqrt(num); i++) {
if ((num % i) == 0) return false;
}
return true;
}
public int solution(int n, int k) {
int answer = 0;
String kNum = Integer.toString(n, k);
StringTokenizer st = new StringTokenizer(kNum, "0");
while (st.hasMoreTokens()) {
String o = st.nextToken();
long num = Long.parseLong(o);
if (isPrime(num)) answer++;
}
return answer;
}
}