> 문제
문제 : [큰 수 만들기]
문제풀이
조합 완탐 문제.
완탐으로 도출되는 각 값에서 소수검사를 해주었고, 중복되는 값은 HashSet으로 처리하였다
import java.util.*;
class Solution {
static char[] numbersToChar;
static boolean[] visit;
static List<Character> list;
static Set<Integer> set;
static boolean check(){
StringBuilder sb = new StringBuilder();
for(int i=0; i<list.size(); i++){
sb.append(list.get(i));
}
int num = Integer.parseInt(sb.toString());
if(num == 0 || num == 1) return false;
if(set.contains(num)) return false;
for(int i=2; i <= Math.sqrt(num); i++){
if(num % i == 0) return false;
}
set.add(num);
return true;
}
static int res;
static void rec(int d){
if(!list.isEmpty() && check()) res++;
if(d == numbersToChar.length) return;
for(int i=0; i<numbersToChar.length; i++){
if(!visit[i]){
list.add(numbersToChar[i]);
visit[i] = true;
rec(d+1);
list.remove(d);
visit[i] = false;
}
}
}
static public int solution(String numbers) {
set = new HashSet<>();
numbersToChar = numbers.toCharArray();
visit = new boolean[numbers.length()];
list = new ArrayList<>();
rec(0);
return res;
}
}
문제 출처 : Programmers
PREVIOUS[프로그래머스] Level3 - 베스트앨범