Problem Solving
[프로그래머스] k진수에서 소수 개수 구하기 (JAVA)
욕심만 많은 사람
2023. 6. 3. 16:18
class Solution {
public int solution(int n, int k) {
int answerCount = 0;
String convertKnary = Integer.toString(n, k);
for(int i = 0 ; i < convertKnary.length(); i++){
char ch = convertKnary.charAt(i);
if(ch == '0')
continue;
StringBuilder sb = new StringBuilder();
for(; i < convertKnary.length(); i++){
char thisCh = convertKnary.charAt(i);
if(thisCh == '0'){
break;
}
sb.append(thisCh);
}
System.out.println("sb.length() :: " + sb.length());
if(isPrimeNum(sb.toString())){
answerCount++;
}
}
return answerCount;
}
private boolean isPrimeNum(String knaryNum){
long num = Long.parseLong(knaryNum);
if(num <= 1)
return false;
for(int i = 2; i <= Math.sqrt(num); i++){
if(num % i == 0)
return false;
}
return true;
}
}
key point
String convertKnary = Integer.toString(n, k);
long num = Long.parseLong(knaryNum);
진수 변환은 위와 같이 하면 매우 편함
retrospective
문제 파악에만 집중하고 제한사항, 주어진 값의 범위는 다소 소홀하게 봤음. [ 1 ≤ n ≤ 1,000,000, 3≤ k ≤ 10 ]

위의 제약사항으로 isPrimeNum()에서 String을 int로 바꿨을 때 범위에 벗어나는 경우가 존재해서 hidden test에 실패함. 따라서 int가 아닌 long으로 변수 선언하고 소수 판별하기!
long num = Long.parseLong(knaryNum);
정수 범위에 따른 타입 선정에 유념하기
⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
second-try
미쳤다.. 정규식 사용하면 쉽게 문자열 분리 가능.
String[] tokens = Long.toString(n, k).split("0+");
⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️