문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
import java.util.Arrays;
class Solution {
public int solution(int[] nums) {
int ans = 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 ++ ){
if(isPrime(nums[i] + nums[j] + nums[k])){
ans += 1; //세개의 합이 소수면 ans가 값 1씩 증가한다
}
}
}
}
return ans;
} //소수 구하는 메서드
public Boolean isPrime(int num){
int cnt = 0;
for(int i = 1; i <= (int)Math.sqrt(num); i ++){
if(num % i == 0) cnt += 1;
}
return cnt == 1;
}
}
solution 메서드
목적: nums 배열에서 3개의 합이 소수인 경우의 수를 계산한다
삼중 루프: 배열의 각 요소를 서로 다른 세 개의 조합으로 선택한다
i, j, k는 배열의 인덱스이며, i < j < k를 보장하여 서로 다른 3개의 요소를 선택한다
소수 체크: 선택된 3개의 숫자의 합이 소수인지 isPrime 메서드를 호출하여 확인한다
결과 반환: 소수인 경우의 수를 ans에 누적하여 반환한다
isPrime 메서드
목적: 주어진 숫자가 소수인지 여부를 확인!
cnt 변수: 숫자의 약수 개수를 센다
for 루프는 1부터 sqrt(num)까지 반복하여 약수를 찾는다. 약수는 num % i == 0 조건으로 찾는다.
소수는 정확히 두 개의 약수를 가지므로, cnt == 1일 때만 소수로 간주(즉, 약수가 1과 자기 자신인 경우)
'(Java)코테연습' 카테고리의 다른 글
(프그)기사단원의 무기 (0) | 2024.08.01 |
---|---|
덧칠하기 (0) | 2024.07.31 |
모의고사 (0) | 2024.07.29 |
과일 장수 (0) | 2024.07.29 |
카드 뭉치 (0) | 2024.07.27 |