프로그래머스 [소수찾기]
문제보기

소스코드
class Solution {
public static int solution(String numbers) {
int[] existNumArr = new int[10];
// 존재하는 숫자 파악
for (int i = 0; i < numbers.length(); i++) {
int number = numbers.charAt(i) - '0';
existNumArr[number] = existNumArr[number] + 1;
}
// 최대값 파악
StringBuilder maxNumStr = new StringBuilder();
for (int i = existNumArr.length - 1; i >= 0; i--) {
for (int j = 0; j < existNumArr[i]; j++) {
maxNumStr.append(i);
}
}
// 주어진 숫자 내 소수 파악
int maxNum = Integer.parseInt(maxNumStr.toString());
int answer = 0;
for (int i = 2; i <= maxNum; i++) {
// 소수인지 확인
if (!isPrime(i)) {
continue;
}
// 현재 소수가 주어진 숫자내에서 만들 수 있는지 파악
String number = i + "";
boolean isAnswer = false;
for (int k = 0; k < number.length(); k++) {
int num = number.charAt(k) - '0';
int beforeLength = number.length();
int afterLength = number.replace(num + "", "").length();
int diff = beforeLength - afterLength;
if (diff == 0 || diff > existNumArr[num]) {
isAnswer = false;
break;
} else {
isAnswer = true;
}
}
if (isAnswer) {
System.out.println(i);
answer++;
}
}
return answer;
}
public static boolean isPrime(int num) {
if (num <= 1) return false;
if (num == 2) return true;
// 짝수 처리
if (num % 2 == 0) return false;
// 홀수 처리
for (int i = 3; i * i <= num; i = i + 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
}