연속된 수를 하나의 vector에 넣어두고 어떻게 그 수를 처리할 것인가.
자연수 n에 대하여 n보다 작거나 같은 연속된 자연수들의 합으로 n이 되는 경우의 수
n이하의 연속된 자연수를 어떻게 다룰 것인가.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int n) {
int answer = 0;
int left=1; //더하는 수 중 가장 작은 수
int right=1; //더하는 수 중 가장 큰 수
int sum=1; //더한 결과 값
vector<int> arr(n+1); //n이하의 연속된 자연수를 담은 Vector
for(int i=1; i<=n; i++){
arr[i]=i;
}
while(right!=n){
if(sum<n){
sum+=arr[++right]; //결과가 n보다 작을 경우 연속된 자연수 하나를 더 더해준다.
}
else if(sum>n){
sum-=arr[left]; //결과가 n보다 큰 경우 연속된 자연수 중 가장 작은 값을 뺀다.
left++;
}
else if(sum==n){
answer++;
sum=sum-arr[left]+arr[++right]; //결과가 n과 같을 경우 가장 연속된 자연수 하나를 더 더하고 가장 작은 값을 뺀다.
left++;
}
}
return (answer+1);
}