728x90
    
    
  StringBuilder를 활용한 dfs 알고리즘 풀이(소수 찾기)
public class FindPrimeNumber { // 소수 찾기
    public static void main(String[] args) {
        String numbers = "1231";
        System.out.println(solution(numbers));
    }
    public static int solution(String numbers) {
        HashSet<Integer> hashSet =new HashSet<>();
        boolean[] visited = new boolean[numbers.length()];
        StringBuilder sb = new StringBuilder();
        for(int i=1; i<=numbers.length();i++){
            dfs(numbers,sb,numbers.length(),i,0,visited,hashSet);
        }
        return hashSet.size();
    }
    public static void dfs(String numbers,StringBuilder sb,int n,int r,int depth,boolean[] visited,HashSet<Integer> hashSet){
        if(depth==r){
            int value = Integer.parseInt(sb.toString());
            if(isPrime(value)){
                hashSet.add(value);
            }
            return;
        }
        for(int i=0; i<n;i++){
            if(!visited[i]){
                sb.append(numbers.charAt(i));
                visited[i] = true;
                dfs(numbers,sb,n,r,depth+1,visited,hashSet);
                sb.setLength(depth);
                visited[i] = false;
            }
        }
    }
    public static boolean isPrime(int value){
        if(value==2){
            return true;
        }
        if(value%2==0 || value==1){
            return false;
        }
        for(int i=3; i<=Math.sqrt(value);i=i+2){
            if(value%i==0){
                return false;
            }
        }
        return true;
    }
}dfs의 풀이에서 StringBuilder를 사용할 경우 dfs가 끝난 후 StringBuilder의 길이를 depth의 값으로로 제한하면 올바른 정답값을 얻을 수 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/42839
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
    
    
  'Java' 카테고리의 다른 글
| 약수 개수 알고리즘 (0) | 2022.11.24 | 
|---|---|
| Sliding Window 알고리즘 (0) | 2022.11.23 | 
| dfs 순열 알고리즘 (0) | 2022.11.19 | 
| 객체를 원하는 조건에 따라 정렬 (0) | 2022.11.13 | 
| Iterator 메소드 (0) | 2022.11.11 | 
