단순히 수열의 숫자를 하나하나 더해줘도 되긴하지만 미리 연속합을 구해놓고 사용하여 최적화 하였다.
#include <string>
#include <vector>
#include <set>
using namespace std;
int solution(vector<int> elements)
{
int n = elements.size();
set<int> answer;
vector<int> dp(n+1, 0); dp[1] = elements[0];
for(int i=2;i<=n;i++) dp[i] = dp[i-1] + elements[i-1];//연속합 배열
for(int i=1;i<=n;i++)
{//1개부터 n개를 고를때
for(int j=0;j<n;j++)
{
if (j + i <= n) answer.insert(dp[j+i]-dp[j]);// 배열에서 범위를 넘어가지 않는다면
else answer.insert(dp[n]-dp[j]+dp[i+j-n]);// 넘어간다면
}
}
return answer.size();
}