[Programmers]-소수 만들기
문제
숫자들이 담겨있는 배열에서 3개의합이 소수인 갯수를 반환하면되는 문제이다.
코드
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int N = nums.length*1000;
boolean[] notPrime = new boolean[N+1];
notPrime[0] = notPrime[1] = true;
for(int i=2;i*i<=N;i++){//에라토스테네스
if(!notPrime[i]){
for(int j=i*i;j<=N;j+=i){
notPrime[j] = true;
}
}
}
int n = nums.length;
for(int i=0;i<n;i++){//3개의합
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
if(i==j||k==i||k==j) continue;//중복이 없어야한다.
int sum = nums[i]+nums[j]+nums[k];//합
if(!notPrime[sum]) answer++;
}
}
}
return answer;
}
}
코드 설명
에라토스테네스 채를 이용해서 소수인지 아닌지 판별하는 배열을 만들어 구한다. 그리고 합이 소수인지 아닌지 판별한다.
요약
- 에라토스테네스의채로 쉽게 구하자