문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
풀이
import java.util.*;
class Solution {
public int solution(int[] nums) {
// nums원소는 1000 이하의 자연수
boolean[] eratos = new boolean[3001];
Arrays.fill(eratos, true);
// 에라토스테네스의 체
for(int i=2; i<3001; i++){
// 이미 0이면 다음 숫자로
if(!eratos[i]) continue;
// 지워지지 않은 숫자의 배수를 0으로 제외시키기
for(int j=i+i; j<3001; j+=i){
eratos[j] = false;
}
}
int answer = 0;
for(int a=0; a<nums.length-2; a++){
for(int b=a+1; b<nums.length-1; b++){
for(int c=b+1; c<nums.length; c++){
int sum = nums[a]+nums[b]+nums[c];
if(eratos[sum]){
answer++;
}
}
}
}
return answer;
}
}
'programmers' 카테고리의 다른 글
[JAVA] △ 카펫 (0) | 2024.07.17 |
---|---|
[JAVA] 올바른 괄호 - stack (0) | 2024.07.17 |
[JAVA] 실패율 - Class(compare) (1) | 2024.07.16 |
[JAVA] 다트게임 (7) | 2024.07.16 |
[JAVA] ☆ 3진법 뒤집기 (1) | 2024.07.16 |