https://school.programmers.co.kr/learn/courses/30/lessons/12977
n이 최대 50개..?
그냥 냅다 삼중포문 돌려도 되겠다
근데 합이 3000까지 가능하니
소수 판별에서 시간복잡도를 줄여야겠구나!
옛날에 했던,, O(sqrt(N))
의 소수 판별 알고리즘으로 풀었는데
아니
잘만 나오는데 자꾸 틀렸다는거임!! ㅠㅠ
왜인지 몰랐는데
11 = 1 + 3 + 7
11 = 2 + 4 + 5
이거 두 개를 다른 케이스로 쳐줘야 했던 거다
암생각없이 unordered_set에 갖다박아서 틀려버렸다ㅜㅜ
이런..
테스트케이스를 잘 보자!!
#include <vector>
#include <iostream>
#include <unordered_set>
#include <cmath>
using namespace std;
bool isSosu(int n) {
int num = sqrt(n);
for (int i = 2 ; i <= num ; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int solution(vector<int> nums) {
int answer = 0;
vector<int> vec;
for (int i = 0 ; i < nums.size() - 2 ; i++) {
for (int j = i+1 ; j < nums.size() - 1 ; j++) {
for (int k = j+1 ; k < nums.size() ; k++) {
int cnt = nums[i] + nums[j] + nums[k];
vec.emplace_back(cnt);
}
}
}
for (auto& s : vec) {
if (isSosu(s)) answer += 1;
}
return answer;
}