💡Problem Solving/Programmers
[프로그래머스] 소수 찾기 (Java)
gom20
2021. 10. 23. 11:22
#문제
https://programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
#소스코드
import java.util.*;
class Solution {
public ArrayList<Integer> primes = new ArrayList<Integer>();
public int[] numbers;
public boolean[] used;
public int num, count;
public boolean isPrime(int k){
if(k < 2) return false;
for(int i = 2; i <= Math.sqrt(k); i++){
if(k%i == 0){
return false;
}
}
if(!primes.contains(k)){
primes.add(k);
}
return true;
}
public void recurFunction(int num, int[] numbers, boolean[] used){
if(String.valueOf(num).length() == numbers.length){
return;
}
for(int i = 0; i < numbers.length; i++){
if(used[i]) continue;
int newNum = Integer.parseInt(num + "" +numbers[i]);
if(isPrime(newNum)) count++;
used[i] = true;
recurFunction(newNum, numbers, used);
used[i] = false;
}
}
public int solution(String input) {
char[] arr = input.toCharArray();
used = new boolean[arr.length];
numbers = new int[arr.length];
for(int i= 0; i < numbers.length; i++){
numbers[i] = Integer.parseInt(String.valueOf(arr[i]));
}
for(int i = 0; i < numbers.length; i++){
if(numbers[i] == 0) continue;
used[i] = true;
if(isPrime(numbers[i])) count++;
recurFunction(numbers[i], numbers, used);
used[i] = false;
}
return primes.size();
}
}