안녕 세상아,

[프로그래머스/c++] Lv2 연속 부분 수열 합의 개수 본문

프로그래머스

[프로그래머스/c++] Lv2 연속 부분 수열 합의 개수

돈 많은 백수가 되고싶다 2024. 10. 3. 15:41

https://school.programmers.co.kr/learn/courses/30/lessons/131701

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 중복되는 숫자가 있을 수 있기 때문에 set을 사용한다. 

2. 첫번째 for문은 인덱스 시작 부분을 나타낸다. 

3. 두번째 for문에서 elements.size() + i 를 하는 이유는 이후에 elements.size()로 나누면서 원형을 표현한 것이다. 만약 주어진 길이를 넘어도 size로 나누면서 원형으로 돌아오게 만듬

4. 각각의 부분 수열을 더한 후 set에 넣어준다. insert를 써도 되지만 emplace를 더 추천함..(성능 최적화)

#include <string>
#include <vector>
#include <set>

using namespace std;

int solution(vector<int> elements) {
    int answer = 0;

    set<int> s;

    for (int i = 0; i < elements.size(); i++) {
        int sum = 0;
        for (int j = i; j < elements.size() + i; j++) {
            int idx = j % elements.size();
            sum += elements[idx];
            s.emplace(sum);
        }
    }
    answer = s.size();

    return answer;
}