프로그래머스 소수찾기

이동훈·2024년 8월 28일
post-thumbnail

문제

정답 코드


import java.util.*;

class Solution {
    Set<Integer> candidates = new HashSet<>();
    
    public int solution(String numbers) {
		    //✅ 재귀를 이용해 숫자 조합을 생성한다.
        permutation(numbers, 0, new boolean[numbers.length()], 0);
        
        //✅ 각 숫자 조합을 확인하여 소수의 개수를 센다.
        int answer = 0;
        for (int num : candidates) {
            if (isPrime(num))  answer++;
        }
        
        return answer;
    }
    
    void permutation(String numbers, int current, boolean[] visited, int digit) {
        if (digit == numbers.length()) return;
        
        for (int i = 0; i < numbers.length(); i++) {
            if (visited[i]) continue;
            
            int newValue = current + (int)((numbers.charAt(i) - '0') * Math.pow(10, digit));
            candidates.add(newValue);
            
            visited[i] = true;
            permutation(numbers, newValue, visited, digit + 1);
            visited[i] = false;
        }
    }
        
    boolean isPrime(int n) {
        if (n < 2) return false;
        
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        
        return true;
    }
}

정답 코드(2)

import java.util.HashSet;
class Solution {
    public int solution(String numbers) {
        HashSet<Integer> set = new HashSet<>();
        permutation("", numbers, set);
        int count = 0;
        while(set.iterator().hasNext()){
            int a = set.iterator().next();
            set.remove(a);
            if(a==2) count++;
            if(a%2!=0 && isPrime(a)){
                count++;
            }
        }        
        return count;
    }

    public boolean isPrime(int n){
        if(n==0 || n==1) return false;
        for(int i=3; i<=(int)Math.sqrt(n); i+=2){
            if(n%i==0) return false;
        }
        return true;
    }

        public void permutation(String prefix, String str, HashSet<Integer> set) {
        int n = str.length();
        //if (n == 0) System.out.println(prefix);
        if(!prefix.equals("")) set.add(Integer.valueOf(prefix));
        for (int i = 0; i < n; i++)
          permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), set);

    }

}

0개의 댓글