문제
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
나의 코드
import java.util.*;
public class FindPrimeNumber {
public static int solution(String numbers) {
int answer = 0;
String[] strArr = numbers.split("");
Set<Integer> set=new HashSet<>();
for(int i=1;i<=strArr.length;i++){
perm(strArr, 0, i, set);
}
answer=set.size();
return answer;
}
public static void perm(String[] arr, int depth, int k, Set<Integer> set){
if(depth==k){
print(arr, k, set);
return;
}
else{
for(int i=depth;i<arr.length;i++){
swap(arr, i, depth);
perm(arr, depth+1, k, set);
swap(arr, i, depth);
}
}
}
public static void swap(String[] arr, int i, int j){
String temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void print(String[] arr, int k, Set<Integer> set){
StringBuilder s=new StringBuilder();
for(int i=0;i<k;i++){
s.append(arr[i]);
}
primeNumber(set, s);
}
public static void primeNumber(Set<Integer> set, StringBuilder s){
int num=Integer.parseInt(String.valueOf(s));
boolean prime=true;
if(num<=1){
return;
}
for(int i=2;i<=Math.sqrt(num);i++){
if(num%i==0){
prime=false;
break;
}
}
if(prime){
set.add(num);
}
}
}
나의 풀이
'코딩테스트 풀이 > 프로그래머스' 카테고리의 다른 글
완전탐색 - 카펫 [JAVA] (0) | 2020.06.12 |
---|---|
완전탐색 - 숫자 야구 [JAVA] (0) | 2020.06.11 |
완전탐색 - 모의고사 [JAVA] (0) | 2020.06.07 |
정렬 - H-Index [JAVA] (0) | 2020.06.05 |
정렬 - 가장 큰 수 [JAVA] (0) | 2020.06.04 |