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

홈런볼·2023년 7월 19일

프로그래머스

목록 보기
17/36

문제링크

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

문제설명

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

입출력

numsresult
[1,2,3,4]1
[1,2,7,6,4]4

문제 로직

필요한 자료구조 : 배열
1. 조합을 이용해 입력값 중 3개를 뽑는다
2. 뽑은 3개의 숫자를 더한 후
3. 소수인지 판별하고 소수이면 count 변수를 증가시켜준다

코드

class Solution {
    static int count = 0;
    
    public int solution(int[] nums) {
        boolean[] visited = new boolean[nums.length];
        comb(nums,visited,0,3);
        return count;
    }

    static void comb(int[] arr, boolean[] visited, int start, int r) {
        if(r == 0) {
            int num = 0;
            for(int i=0;i<arr.length;i++){
                if(visited[i] == true){
                    num+=arr[i];
                }
            }
            isPrime(num);
            return;
        } else {
            for(int i = start; i < arr.length; i++) {
                visited[i] = true;
                comb(arr, visited, i + 1, r - 1);
                visited[i] = false;
            }
        }
    }
    static void isPrime(int num){
        if(num < 2) return;
        if(num == 2) return;

        for(int i = 2; i <= Math.sqrt(num); i++) if(num % i == 0) return;

        count++;
        return;
    }
}

정확성 테스트

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기