[Java] programmers-"소수 만들기"

김빛나리·2021년 12월 28일

문제 설명

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



제한사항

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


입축력 예

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


알고리즘

  1. 최소 3개의 수를 돌아가면서 더해주기 위해서는 3개의 반복문이 필요하다.
  2. 첫번째 for문은 nums의 길이만큼 for문을 돌리는데, 0부터 시작해서 nums의 길이가 2개 남았을 때는 탈출한다.
  3. 두번째 for문은 nums의 길이만큼 for문을 돌리는데, 앞선 숫자에 1을 더하고부터 nums의 길이가 1개 남았을 때는 탈출한다.
  4. 세번째 for문은 앞선 숫자에 1을 더하고부터 nums의 길이만큼 for문을 돌린다.
  5. 위 세 개의 숫자를 더해서 check_nums 변수에 담고, 소수인지 판별하기 위해 for문을 2부터 check_nums의 반까지 돌려서 한번이라도 나누어 떨어진다면 탈출, 아니면 cnt_nums 변수 증가시킨다.
  6. 소수 판별 for문이 끝나면 cnt_nums가 check_nums의 반에서 1을 뺀 수와 같다면 소수라서 answer를 증가시킨다.


내 소스 코드

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int check_nums = 0, cnt_nums = 0;

        for(int i=0;i<nums.length;i++) {
            if(i==nums.length-2) break;
            for(int j=i+1;j<nums.length;j++) {
                if(j==nums.length-1) break;
                for(int k=j+1;k<nums.length;k++) {
                    check_nums = nums[i] + nums[j] + nums[k];
                    
                    for(int a=2;a<=check_nums/2;a++) {
                        if(check_nums%a == 0) break;
                        cnt_nums++;
                    }
                    if(cnt_nums == check_nums/2-1) answer++;
                    cnt_nums = 0;
                }
            }
        }

        return answer;
    }
}

0개의 댓글