소수 먼저 구하고 투 포인터로 해결
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<bool> nums(n+1, true);
vector<int> arr;
for (int i = 2; i <= n; ++i)
{
if (nums[i])
{
for (int j = i * 2; j <= n; j += i)
{
nums[j] = false;
}
}
}
for (int i = 2; i < nums.size(); ++i)
{
if (nums[i]) arr.push_back(i);
}
int startIdx = 0;
int endIdx = 0;
int sum = 0;
int answer = 0;
while (startIdx < arr.size())
{
if (sum < n)
{
if (endIdx < arr.size())
{
sum += arr[endIdx];
endIdx++;
}
else
{
break;
}
}
else if (sum > n)
{
sum -= arr[startIdx];
startIdx++;
}
else
{
answer++;
if (endIdx < arr.size())
{
sum += arr[endIdx];
endIdx++;
}
else
{
break;
}
}
}
cout << answer;
return 0;
}
'코딩 테스트' 카테고리의 다른 글
프로그래머스 - 섬 연결하기 (1) | 2024.11.15 |
---|---|
백준 - 12865 배낭 문제 (0) | 2024.11.13 |
백준 1010 - 다리 놓기 (0) | 2024.11.11 |
백준 1707 - 이분 그래프 (0) | 2024.11.11 |
백준 2559 (0) | 2024.11.08 |