코딩 테스트/프로그래머스
[ 프로그래머스 - java ] 소수 만들기(Summer/Winter Coding(~2018))
snow_hong
2022. 3. 24. 13:10
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
[ 풀이 ]
class Solution {
public int solution(int[] nums) {
int answer = 0;
for(int i = 0; i<nums.length -2; i++){
for(int j = i+1; j<nums.length-1; j++){
for(int k = j+1; k<nums.length; k++){
int num = (nums[i] + nums[j] + nums[k]);
if(isPrime(num)){
answer += 1;
}
}
}
}
return answer;
}
//소수판별
public boolean isPrime(int number){
for(int i=2; i<number/2; i++){
if(number % i == 0) return false;
}
return true;
}
}
내가 만든 소수판별 함수는 해당숫자의 절반까지만 확인하는 방법이다. 이 원리는 절반 이상의 숫자들은 확인이 필요 없는 숫자들이기 때문이다. 자기자신을 제외하고 절반을 초과하는 숫자에서 나눴을때 나머지가 0이되는 숫자는 나올수가 없다. 시간복잡도도 O(N)이 된다.
728x90