52퍼센트에서 틀리는데, 왜냐하면 마지막 값이 m인 경우 처리해야 한다.
마지막 인덱스에 대한 처리를 해야 한다.
: 마지막 값을 누적하게 되면, 자동적으로 while문 조건에 걸려서
처리되지 않게 된다.
: 일반적인 배열 인덱스까지 진행하면 답이 나오지 않으므로,
인덱스 하나 더 늘리는데, 누적해도 문제가 없는 초기화를 모두 0으로 처리하자.
vector<int>v(n);
for (int i = 0; i < n; ++i)
{
cin >> v[i];
}
// 고정하는 용도로만 사용할까??
int sstart = 0;
int eend = 0;
int sum = 0;
int cnt = 0;
while ( eend < n)
{
if (sum >= m)
{
if(sum == m)
++cnt;
sum -= v[sstart];
sstart++;
}
else if (sum < m)
{
sum += v[eend];
eend++;
}
}
-> 이렇게 작성하게 되면, eend < n 이 되기 때문에 1번 예제는 옳지 못한다.
vector<int>v(n + 1);
for (int i = 0; i < n; ++i)
{
cin >> v[i];
}
// 고정하는 용도로만 사용할까??
int sstart = 0;
int eend = 0;
int sum = 0;
int cnt = 0;
while ( eend <= n)
{
if (sum >= m)
{
if(sum == m)
++cnt;
sum -= v[sstart];
sstart++;
}
else if (sum < m)
{
sum += v[eend];
eend++;
}
}