노트북 쿨링팬이 아예 돌지 않아 화요일까지 수리를 기다려야 한다. 집에 와서 공부를 하기 환경이지만, 어떻게든 공부를 해봤다.
int 배열 nums가 주어질 때, nums의 서로 다른 3개의 수를 더해 소수가 되는 경우의 수를 모두 구하라
3개의 수를 뽑기위해 여러 방법을 써봤으나 아직 수행이 부족해 for문을 3개쓰는 방법 말고는 떠올리지 못했다. 시간복잡도가 아마 O(n^3)을 넘어갈 것이다. 추후 시간복잡도를 더 줄이기위해 더 공부해보려 한다.
소수를 판단하기 위해 isPrime()이라는 private 메서드를 새로 만들었다.
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 sum = nums[i] + nums[j] + nums[k];
if (isPrime(sum)) answer++;
}
}
}
return answer;
}
private boolean isPrime(int sum){
for (int i = 2; i<= Math.sqrt(sum); i++){
if (sum % i == 0){
return false;
}
}
return true;
}