
나의 풀이
class Solution {
public int solution(int[] nums) {
int answer = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
for (int k = j + 1; k < nums.length; k++) { // 1
int value = nums[i] + nums[j] + nums[k]; // 2
int count = 0;
for (int l = 1; l <= value; l++) { // 3
if (value % l == 0) count++;
}
if (count == 2) answer++; // 4
}
}
}
return answer;
}
}
과정
- 주어진 숫자 중 3개를 중복되지않게 더해야해서 3중 for문
- value에 각 숫자를 더한 값을 넣는다
- 1부터 value까지의 숫자중 value와 나누어 떨어지는 숫자에서 count 증가
- 만약 count가 2라면(약수가 1과 자기 자신뿐) 소수이니 answer을 증가
다른 사람 풀이
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;
}
}
}
}
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;
}
}
- 메서드를 추가해서 가독성이 내 코드보다 좋다고 생각된다
- 제곱근까지만 반복하여 약수를 찾고, 불필요한 반복도 조금 줄여서 시간 복잡도 측면에서 효율적이다