알고리즘 풀이/프로그래머스
[level2] 프로그래머스 - 소수 찾기(JAVA)
데롱디롱
2021. 9. 14. 20:01
728x90
- 문자를 1~N(문자열길이)개 선택하여 줄세우는 경우의 수를 구한다. => 순열
- N개의 문자를 줄세웠다면, 소수인지 확인 후 Set에 넣어준다. => 에라토스테네스의 체
Set은 중복을 허용하지 않기 때문에, 같은 숫자가 들어와도 상관 없다.
- Set에 들어있는 숫자의 개수를 리턴한다.
import java.util.*;
class Solution {
static boolean isUsed[];
static Set<Integer> prime;
public int solution(String numbers) {
prime = new HashSet<Integer>();
isUsed = new boolean[numbers.length()];
for(int i = 1; i <= numbers.length(); i++)
comb(i, "", numbers);
return prime.size();
}
static void comb(int N, String num, String numbers) {
if(num.length() == N) {
int n = Integer.parseInt(num);
if(n > 1 && isPrime(n))
prime.add(n);
}
for(int i = 0; i < numbers.length(); i++) {
if(!isUsed[i]) {
isUsed[i] = true;
comb(N, num + numbers.charAt(i), numbers);
isUsed[i] = false;
}
}
}
static boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if(n % i == 0)
return false;
}
return true;
}
}