문제
https://school.programmers.co.kr/learn/courses/30/lessons/42839
접근 방법 및 풀이
순열을 구하는 문제
순열에 대한 결과가 나올 때마다 숫자로 변환해 Set에 넣어서 중복을 제거
구해진 숫자들에서 소수의 갯수를 반환
import java.util.*;
public class Q30_42839 {
Set<Integer> set = new HashSet<>();
public int solution(String numbers) {
int length = numbers.length();
String[] arrays = numbers.split("");
for (int i = 1; i <= length; i++) {
permutation(arrays, arrays.length, i, 0);
}
int answer = 0;
for (int num : set) {
if (isPrime(num)) {
answer++;
}
}
return answer;
}
private boolean isPrime(int number) {
if (number == 0 || number == 1) {
return false;
}
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
// n개 중에 r개를 선택하는 순열
private void permutation(String[] list, int n, int r, int depth) {
// 종료 조건
// - r개 만큼 고른 경우
if (depth == r) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < r; i++) {
sb.append(list[i]);
}
set.add(Integer.parseInt(sb.toString(), 10));
return;
}
for (int i = depth; i < n; i++) {
swap(list, depth, i);
permutation(list, n, r, depth + 1);
swap(list, depth, i);
}
}
private void swap(String[] list, int i, int j) {
String temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}