[Java] 소수찾기

Korangii·2024년 8월 27일

프로그래머스

목록 보기
16/21
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;
    }
}

문제 설명

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

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

profile
https://honeypeach.tistory.com/ 로 이전했습니다.

0개의 댓글