본문 바로가기
Algorithm/Programmers

[프로그래머스/JAVA] LV1 - 소수 만들기 / JAVA

by 김비누! 2022. 3. 31.

프로그래머스 LV1 - 소수 만들기

문제

코드

isPrime 함수는 백준 골드바흐를 풀때 썼던 것과 동일 (링크에는 TIL 속 작은 골드바흐가 있다.)

class Solution {
    static int answer = 0;

    static void combination(int[] arr, boolean[] visited, int start, int r) {
        if(r == 0) {
            int sum = sum(arr, visited);
            if(isPrime(sum))
                answer++;   
            return;
        } 

        for(int i=start; i<arr.length; i++) {
            visited[i] = true;
            combination(arr, visited, i + 1, r - 1);
            visited[i] = false;
        }
    }
    static int sum(int[] arr, boolean[] visited) {
            int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (visited[i]) {
                sum += arr[i];
            }
        }
        return sum;
    }

    static boolean isPrime(int n) {
        if (n == 1) /* 1은 소수가 아니므로 제외 */
            return false;
        else if (n == 2)
            return true;

        /* 2부터 루트(tmp)+1 까지 */
        for (int j = 2; j < (int) Math.sqrt(n) + 1; j++)
            if (n % j == 0)
                return false;

        return true;
    }
    public int solution(int[] nums) {

        boolean[] visited = new boolean[nums.length];

        combination(nums, visited, 0, 3 );

        return answer;
    }
}

큰일났다...조합 어떻게 구할지 계속 생각해도 머리가 안돌아가서 결국 찾아봤다. (참고한 블로그)
삼중for문은 하기 싫었고ㅜ
문제는 찾아보지 않았지만 아주 당황스럽다. 알고리즘에 시간투자를 더 해야겠다.

댓글