본문 바로가기

알고리즘/SWEA

7812

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의 실행 순서이다.

먼저 누적 된 값이 갖고있는 액수보다 크면 안된다는 것이다. 그래서 큰 경우는 살 수 없는 땅이 있기 때문에,

이를 먼저 제거해야 하고,

 

그 다음에 갖고 있는 액수와 매치 되는지 확인해야 한다.

'알고리즘 > SWEA' 카테고리의 다른 글

7396  (0) 2021.11.03
6719  (0) 2021.11.03
1952  (0) 2021.11.03
6959  (0) 2021.11.03
4088  (0) 2021.11.03