[프로그래머스] 코딩테스트 연습 - 완전탐색 Level 2 소수 찾기

uoahy·2021년 9월 15일
0

Solution.java

import java.util.*;

class Solution {
    public int solution(String numbers) {
        int answer = 0;
        
        HashSet<Integer> hs = new HashSet<>();
        
        boolean[] visited = new boolean[numbers.length()];
        
        makeNumber("", numbers, visited, hs);
        
        Iterator<Integer> iterator = hs.iterator();
        while (iterator.hasNext()) {
            int num = iterator.next();
            
            if (num % 2 == 0) {
                if (num == 2) answer++;
            }
            else {
                if (num == 1) continue;
                
                boolean prime = true;
                
                for (int i = 3; i <= Math.sqrt(num); i++) {
                    if (num % i == 0) {
                        prime = false;
                        break;
                    }
                }
                
                if (prime) answer++;
            }
        }
        
        return answer;
    }
    
    void makeNumber(String num, String numbers, boolean[] visited, HashSet<Integer> hs) {
        if (num.length() > 0) hs.add(Integer.parseInt(num));
        
        if (num.length() == numbers.length()) {
            return;
        }
        
        for (int i = 0; i < numbers.length(); i++) {
            if (!visited[i]) {
                visited[i] = true;
                makeNumber(num + numbers.charAt(i), numbers, visited, hs);
                num = num.substring(0, num.length());
                visited[i] = false;
            }
        }
    }
}

순열(permutation)에 대해 공부할 수 있는 기회였다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

0개의 댓글