숫자의 조합을 만들어서 소수인지 판별하면 되는 문제이다.
조합은 3중 for문을 사용해서 구현하였으며 소수 판별은 시간복잡도를 줄이기 위해 sqrt(num) 값까지만 계산하게 해두었다.
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int num){
if(num<=2) return false;
for(int i=2;i<=sqrt(num);i++){ //시간복잡도 줄이기
if(num%i==0) return false;
}
return true;
}
int solution(vector<int> nums) {
int answer = 0;
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
for(int h=j+1;h<nums.size();h++){
int n= nums[i]+nums[j]+nums[h]; //조합고려
if(isPrime(n)){
answer++;
}
}
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV 1][C++] 실패율 (0) | 2024.03.04 |
---|---|
[프로그래머스][LV 1][C++] 소수 찾기 (0) | 2024.03.04 |
[프로그래머스][LV 1][C++] 2016년 (0) | 2024.02.29 |
[프로그래머스][LV 1][C++] [1차] 비밀지 (0) | 2024.02.29 |
[프로그래머스][C++][LV 1] 최대공약수와 최소공배수 (0) | 2024.02.26 |