static int N, M;
static int ground[10000];
static queue<int> q;
static int solution(void)
{
int tot = 0, ret = 0;
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
{
scanf("%d", &ground[i]);
q.push(ground[i]);
tot += ground[i];
while (!q.empty() && tot > M)
{
tot -= q.front();
q.pop();
}
if (tot == M)
{
ret += 1;
tot -= q.front();
q.pop();
}
}
while (!q.empty())
q.pop();
return ret;
}
과거에 풀었던 문제 중에 이와 비슷한 유형의 문제를 풀었던 기억이 있고, 이를 한차례 정리했던 기억이 있어서
거기에 사용했던 코드를 살짝 응용하면 되는 것 같다.
여기서 중요한 점은 while()과 if의 실행 순서이다.
먼저 누적 된 값이 갖고있는 액수보다 크면 안된다는 것이다. 그래서 큰 경우는 살 수 없는 땅이 있기 때문에,
이를 먼저 제거해야 하고,
그 다음에 갖고 있는 액수와 매치 되는지 확인해야 한다.