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

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개의 댓글