알고리즘

프로그래머스 소수 찾기 (JAVA)

박카스마시며코딩 2022. 6. 12. 18:02

https://programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

 

저는 문자열을 모두 숫자로 변경하고 이를 dfs를 통해 각각의 소수를 찾았습니다.

저는 중복체크를 위해 set을 사용하여 소수의 개수를 찾았습니다.

 

import java.util.*;
class Solution {
    public int solution(String numbers) {
        int answer = 0;
        int size = numbers.length();
        int[] num = new int[size];
        for(int i = 0 ; i < size ; i++){
            num[i] = Integer.parseInt(numbers.charAt(i)+"");
        }
        boolean[] used = new boolean[size];
        Set<Integer> prime = new HashSet<>();
        dfs(0,0,used,num,size,prime);
        answer = prime.size();
        return answer;
    }
    private void dfs(int depth,int now,boolean[]used,int[] num,int size,Set<Integer> prime){
        if(checkIsPrime(now)){
            prime.add(now);
        }
        if(depth == size){
            return ;
        }
        for(int i = 0 ; i < size ; i++){
            if(used[i]){
                continue;
            }
            used[i] = true;
            dfs(depth+1,10*now +num[i],used,num,size,prime);
            used[i] = false;
        }
    }
    private boolean checkIsPrime(int num){
        if(num == 1 || num == 0){
            return false;
        }
        for(int i = 2 ; i <= Math.sqrt(num); i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
}