C++:: 프로그래머스 < 연속 부분 수열 합의 개수 >

jahlee·2023년 5월 14일
0

프로그래머스_Lv.2

목록 보기
44/106
post-thumbnail

단순히 수열의 숫자를 하나하나 더해줘도 되긴하지만 미리 연속합을 구해놓고 사용하여 최적화 하였다.

#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();
}

0개의 댓글