[프로그래머스] 연속 부분 수열 합의 개수 | C++
Algorithm/문제풀이
2023. 1. 14. 14:26
문제
원형으로 나열된 수열의 부분합 수를 구하는 문제이다.
나의 풀이 전략
set 자료형을 사용하여 부분합의 중복을 막는다.
상세
1) elements에서 합연산을 출발할 지점을 for 문으로 구축한다.
더보기
for (int start = 0; start < elements.size(); ++start) // 현재단계
{
}
2) 부분합의 길이를 1에서부터 elements의 길이까지를 for 문으로 구축한다.
더보기
for (int start = 0; start < elements.size(); ++start)
{
for (int length = 1; length <= elements.size(); ++length) // 현재단계
{
}
}
3) 부분합을 저장해둘 변수 sum을 선언, 0으로 초기화해둔다.
elements를 for 문으로 탐색하여 sum에다 더해나간다.
sum이 구해지면 set<int> 자료형인 sumSet에 넣어둔다. (이렇게 하면 중복방지)
더보기
for (int start = 0; start < elements.size(); ++start)
{
for (int length = 1; length <= elements.size(); ++length)
{
// 현재단계
int sum = 0;
for (int i = start; i < start + length; ++i)
{
sum += elements[i%elements.size()];
}
sumSet.insert(sum);
}
}
4) sumSet의 크기를 answer로 저장한다.
더보기
answer = sumSet.size();
return answer;
전체 소스코드
#include <vector>
#include <set>
#include <iostream>
using namespace std;
set<int> sumSet;
int solution(vector<int> elements)
{
int answer = 0;
for (int start = 0; start < elements.size(); ++start)
{
for (int length = 1; length <= elements.size(); ++length)
{
int sum = 0;
for (int i = start; i < start + length; ++i)
{
sum += elements[i%elements.size()];
}
sumSet.insert(sum);
}
}
answer = sumSet.size();
return answer;
}
int main()
{
cout << solution({7,9,1,1,4});
return 0;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[백준] 토마토 | 7569 | C++ (0) | 2023.03.07 |
---|---|
[프로그래머스] 최솟값 만들기 | C++ (0) | 2023.02.18 |
[프로그래머스] 가장 큰 수 | C++ (0) | 2023.01.12 |
[프로그래머스] 모음사전 | C++ (0) | 2023.01.12 |
[프로그래머스] 피로도 | C++ (0) | 2023.01.11 |