[프로그래머스]완전탐색-소수 찾기

snusun·2021년 1월 17일
0
  • 알고리즘

    (1) numbers의 모든 순열을 구한다.
    (2) 소수일 경우에만 ArrayList에 넣는다.
    (3) size를 return

import java.util.*;

class Solution {
    static ArrayList<Integer> primes = new ArrayList<>();

    public int solution(String numbers) {
        String[] nums = numbers.split("");

        for(int i=1; i<=nums.length; i++){
            int n = nums.length;
            String[] output = new String[i];
            boolean[] visited = new boolean[n];
            perm(nums, output, visited, 0, nums.length, i);
        }

        return primes.size();
    }

    static void perm(String[] arr, String[] output, boolean[] visited, int depth, int n, int r) {
        if (depth == r) {
            int num = Integer.parseInt(String.join("", output));
            if(!primes.contains(num) && isPrime(num)){
                primes.add(num);
            }
            return;
        }

        for (int i = 0; i < n; i++) {
            if (!visited[i]) {
                visited[i] = true;
                output[depth] = arr[i];
                perm(arr, output, visited, depth + 1, n, r);
                visited[i] = false;
            }
        }
    }

    static boolean isPrime(int num){
        if (num <= 1) return false;
        else if (num == 2 || num == 3) return true;
        else if (num % 2 == 0 || num % 3 == 0) return false;
        
        for (int i = 5; i <= num / i; i++)
        {
            if (num % i == 0 || num % (i + 2) == 0)
                return false;
        }
        return true;
    }
    
}

얻어갈 것이 많은 문제였습니다.. 순열 알고리즘, 소수 찾는 알고리즘, string과 string array 사이의 변환 등의 테크닉이 들어감

profile
대학생 근데 이제 컴공을 곁들인

0개의 댓글

Powered by GraphCDN, the GraphQL CDN