주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
ex) nums = [1, 2, 3, 4], result = 1 / nums = [1, 2, 7, 6, 4], result = 4
소수가 아닌 경우를 먼저 처리 후, else if 문을 사용하여 소수인 경우를 그 다음 처리
→ 소수인 경우를 먼저 처리해보니, 소수가 아닌 경우도 같이 처리되어 역으로 소수가 아닌 경우를 먼저 처리하는 것이 낫다고 생각
public int solution(int[] nums) {
int answer = 0;
for(int i = 0; i < nums.length - 2; i++) {
// i의 최댓값이 어디까지인 지 인지!
for(int j = i + 1; j < nums.length - 1; j++) {
// j의 최댓값이 어디까지인 지 인지!
for(int k = j + 1; k < nums.length; k++) {
int temp = nums[i] + nums[j] + nums[k];
for(int n = temp - 1; n > 0; n--) {
if(n != 1 && (temp % n) == 0)
// 나누는 수가 1이 아닌 데도 나눠지는 경우 => 소수가 아닌 경우
break;
else if(n == 1)
// 나누는 수가 1인 경우 => 소수인 경우
answer++;
}
}
}
}
return answer;
}
함수를 활용하는 연습이 필요
제곱근을 구하는 함수인 sqrt() 함수를 사용
public Boolean isPrime(int num){ // num이 위의 temp와 같은 값
int cnt = 0;
for(int i = 1; i <= (int)Math.sqrt(num); i++){
if(num % i == 0) cnt += 1;
}
return cnt == 1;
}