본문 바로가기

Java

StringBuilder를 활용한 dfs

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