본문 바로가기
코딩테스트/프로그래머스

[프로그래머스, JAVA, Lv1] 소수만들기 (조합, 경우의 수, 소수)

by 개발김쿙 2023. 11. 27.

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12977 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

< 문제 설명 >

 

 

<문제 해석>

1. 주어진 숫자 배열 중 3개의 수를  뽑는다.

1-1. 이때 숫자의 순서는 상관없다.

 

2. 뽑은 3개의 숫자를 더했을 때 소수가 나와야한다.

2-1. 소수는 1을 제외한 자기자신으로만 나누어지는 수.

 

3. answer은 소수가 나오는 경우의 수

 

< 문제 풀이 >

class Solution {
    public int solution(int[] nums) {
        int answer = 0; // 경우의 수 count
        
        // nums.length 중 3개를 뽑아 소수가 되는 수
        // 1. nums 중 3개 뽑기, 순서상관x
        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 sum = nums[i] + nums[j] + nums[k];
                    // 2. if(sum이 소수일 때) answer++
                    if(isPrime(sum)) answer++;
                }
            }
        }
        
        return answer;
    }
    
    // 소수 체크 메서드
    public boolean isPrime(int n){
        boolean check = true;
        // n이 1이 아닌 약수로 나누어 떨어질 경우 false
        for(int i=2; i <= Math.sqrt(n); i++){
            if(n % i ==0) check = false;
        }
        
        return check;
    }
}