프로그래머스 소수 만들기 [Java]

문제출처

https://programmers.co.kr/learn/courses/30/lessons/12977

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

import java.util.Arrays;
class Solution {
    int answer = 0;
    public int solution(int[] nums) {
        int[] bucket = {0, 0, 0};
        
        select(nums, bucket, 0, 0);

        return answer;
    }
    
    public void select(int[] nums, int[] bucket, int now, int k){
        if(k > 3) {return;}
        if(k == 3){
            int sum = 0;
            for(int i = 0; i < 3; i++){
                sum += bucket[i];
            }
            if(check(sum)){
                System.out.println(Arrays.toString(bucket) + "를 이용해서 " + sum + "을 만들 수 있습니다.");
                answer++;
            }
            return;
        }
        for(int i = now; i < nums.length; i++){
            bucket[k] = nums[i];
            select(nums, bucket, i + 1, k + 1);
        }
    }
    
    public boolean check(int sum){
        for(int i = 2; i < sum; i++){
            if(sum % i == 0){
                return false;
            }
        }
        return true;
    }
}

어떻게든 풀었지만 시간이 엄청났다... 당연함 재귀에 소수 판별하는 과정까지... 길수밖에 없다.

사실 조합 함수가 필요없다는 생각이 드는게 뽑아햘 것의 개수가 3개로 딱 정해져있기에 이렇게까지 할 필요가 없어보인다.

다른 사람 풀이를 보니 for문을 3개써서 하는 방식으로 했던데 그게 훨씬 시간 절약도 되는거 같다.

myoskin