[JAVA] 소수 만들기

dada·2024년 9월 30일
0

algorithm

목록 보기
13/17

문제 설명

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

제한사항

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

풀이


class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int i, j, k;
        
        for(i = 0; i < nums.length; i++){
            for(j = i+1; j<nums.length; j++){
                for(k = j+1; k<nums.length; k++){
                    int num = nums[i] + nums[j] + nums[k];
                    if(isPrime(num)) answer += 1;
                }
            }
        }
        
        return answer;
    }
    
    private boolean isPrime(int num){
        if (num == 2) return true;
        
        for(int i = 2; i < num; i++){
            if(num % i == 0){
                    return false; 
            }
        }
        
        return true;
        
    }
    
}
  • 숫자 세개를 뽑기 위해서 i, j, k를 활용한 반복문을 만들었고 맨 처음에는 합의 중복을 제거하기 위해서 ArrayList를 새로 만들어 ArrayList에 추가되어 있지 않은 숫자만 또 다시 소수 판별을 해야한다고 생각했다. 하지만 이미 문제에서 주어진 조건에 의해서 그럴 필요는 없었다.
  • 세 숫자의 합을 구해서 소수를 판별하는 함수를 새로 만들고 거기서 소수판별을 통해 소수가 되는 경우의 수를 세면 되는 문제였다.
  • 생각보다 간단했는데 맨 처음에는 문제를 잘 안읽고 숫자를 두개를 뽑아서 합을 만드는 거라고 생각해 잘못 풀었고 두번째는 앞에서도 말했듯 중복을 제거해야 한다는 생각에 수정을 하다가 시간이 걸렸다.
profile
CV, Vision AI 등을 공부합니다

0개의 댓글