본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 소수 만들기 (level 1)

by 코딩삐약 2021. 5. 8.

문제 설명

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

 

제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

입출력 예

 

입출력 예 설명

 

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

 

참고 - 소수 판별법 알고리즘

jm-park.github.io/algorithm/2018/08/06/Prime-Number(%EC%86%8C%EC%88%98)-%ED%8C%90%EB%B3%84%EB%B2%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98.html

 

JM's IT Blog

개발쟁이가 되기 위한 생초짜의 기술 블로그 기록기

jm-park.github.io

📚😊해결

1. 3중 for문을 이용해 3가지 숫자를 더한 모든 경우를 따짐

2. 3가지 숫자를 더한 값이 소수인지 아닌지 판별하는 메서드를 따로 만듦

3. 소수가 맞을 경우 answer값을 증가시키고 그렇지 않을 경우 넘어감

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        boolean chk = false;
        
        for(int i=0; i < nums.length; i++){
            for(int j = i+1; j < nums.length; j++){
                for(int k = j+1; k < nums.length; k++){
                    int num = nums[i] + nums[j] + nums[k];
                    if(num >= 2)
                        chk = decimalCheck(num);
                    if(chk == true)
                        answer++;
                }
            }
        }
        return answer;
    }
    
    public boolean decimalCheck(int num){
        boolean check = true;
        if(num == 2){ // 짝수 중 2만 소수임
            return check;
        }
        for(int i = 2; i < num; i++){
            if(num % i == 0){ // 배수가 되는 것은 소수가 아님 
                check = false;
                break;
             }
            }
           return check;
        }
}