본문 바로가기

알고리즘/Programmers

[Programmers] 소수 만들기

문제 설명

주어진 숫자 중 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
[1,2,4]를 이용해서 7을 만들 수 있습니다.

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


풀이코드

더보기
import java.util.*;

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

        // 3중 for문으로 세개의 숫자의 인덱스의 값들을 더해준다.
        for(int i=0; i<nums.length; i++) {
            for(int j=i+1; j<nums.length; j++) { // j와 k는 값을 다르게 하여 숫자가 겹치지 않게한다.
                for(int k=j+1; k<nums.length; k++) {
                    int sum = nums[i]+nums[j]+nums[k];
                    // 소수인지 판별하여 answer를 더해준다.
                    if(checkNum(sum)) {
                        answer++;
                    }
                }
            }
        }
        
        return answer;
    }
    // 소수인지 체크하는 메소드
    private boolean checkNum(int num) {
        for(int i=2; i<num; i++) {
            if(num%i == 0) {
                return false;
            }
        }
        return true;
    }
}

풀이방법

배열에서 서로다른 세 개의 수를 더해서 소수인지 판별하고 소수가 몇개나 있는지 확인하는 문제이다.

삼중 for문을 이용하여 세 개의 수를 찾고 소수인지 판별만하면 되는 문제다.

 

  1. 3중 포문으로 값들을 도출하고 더해본다.
  2. 더해진 값을 소수판별을 위해 만든 메소드를 태워주고 소수인지 판별한다.
  3. 소수일경우 answer를 더해주어 풀이를 끝낸다.
  4. 소수인지 판별하는 메소드에서는 해당 수를 2에서부터 1씩 증가시켜 나눴을때 나머지가 0이면 소수가 아닌것으로 판별하여 return 한다.