문제는 프로그래머스 에서 찾을 수 있습니다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 :
K 진수를 구하고 0이 나올 때 까지 문자열로 끊어서 체크하면 된다.
다만 소수를 구하는 과정에서 에라토스테네스의 채를 생각하고 풀면 된다.
int 형으로 할 경우 런타임 에러가 발생하는걸 보니 long으로 대체해서 풀었다.
import java.util.*;
class Solution {
public int solution(int n, int k) {
int answer = 0;
String knum = "";
// k 진수 구하기
while(true) {
int mod = n % k;
n = n / k;
knum = mod + knum;
if (n < k) {
knum = n + knum;
break;
}
}
// 소수 구하기
String target = "";
for(int i = 0; i<knum.length(); i++) {
if (knum.charAt(i) != '0') {
target += knum.charAt(i);
} else {
if (target.contains("0")) {
target = ""; continue;
} else {
if (target != "" && isPrimeNumber(Long.parseLong(target))) {
answer++;
}
target = "";
}
}
}
if (target != "" && isPrimeNumber(Long.parseLong(target))) {
answer++;
}
return answer;
}
public boolean isPrimeNumber(long target) {
if (target < 2) {
return false;
}
if (target < 4) {
return true;
}
for(int i = 2; i<=Math.sqrt(target) + 1; i++) {
if (target % i == 0) {
return false;
}
}
return true;
}
}