3671번: 산업 스파이의 편지 (acmicpc.net)
3671번: 산업 스파이의 편지
각 테스트 케이스에 대해 종이조각을 적절히 배치해서 만들 수 있는 서로 다른 소수의 개수를 출력한다. 이때, 모든 종이 조각을 사용하지 않아도 된다. (7과 1이 있을 때, 만들 수 있는 소수는 7,
www.acmicpc.net
백트래킹
import java.util.*;
import java.io.*;
public class Main3 {
static boolean[] visit;
static int N;
static ArrayList<Integer> arr;
static String s;
static char[] c;
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int C=Integer.parseInt(br.readLine());
for(int t_c=1;t_c<=C;t_c++) {
s=br.readLine();
c=s.toCharArray();
arr=new ArrayList<>();
visit=new boolean[s.length()];
StringBuilder sb=new StringBuilder("");
for(int i=0;i<s.length();i++) {
sb.append(c[i]);
createString(i,sb);
sb=new StringBuilder("");
visit[i]=false;
}
int answer=0;
for(Integer num: arr) {
if(isPrime(num)) answer++;
}
System.out.println(answer);
}
}
static void createString(int x,StringBuilder str) {
if(str.length()>s.length()) return;
visit[x]=true;
int num=Integer.parseInt(str.toString());
if(!arr.contains(num))
arr.add(num);
for(int i=0;i<s.length();i++) {
if(!visit[i]) {
createString(i, str.append(c[i]));
visit[i]=false;
str.delete(str.length()-1,str.length());
}
}
}
//소수 구하기
static boolean isPrime(int num) {
if(num<=1) return false;
for(int i=2; i<=Math.sqrt(num); i++){
if(num%i == 0) return false;
}
return true;
}
}
'코테 공부' 카테고리의 다른 글
[DFS] 연결 요소의 개수(백준 11724번, 자바) (0) | 2023.02.06 |
---|---|
[DFS] ABCDE (백준 13023번, 자바)☆☆☆ (0) | 2023.01.31 |
[DFS|BFS] 백준 1260번, 자바☆ (0) | 2023.01.29 |
[DFS] 적록색약(백준 10026번, 자바)☆ (0) | 2023.01.28 |
[TreeMap]파일정리(백준 20291번, 자바)☆ (0) | 2023.01.26 |