Game Develop

[Algorithm]Baekjoon 13422번 :: 도둑 본문

Algorithm/Baekjoon

[Algorithm]Baekjoon 13422번 :: 도둑

MaxLevel 2024. 10. 25. 18:00

https://www.acmicpc.net/problem/13422

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>
#include <functional>
#include <sstream>
#include <memory.h>
#include <deque>
#include <set>
#include <unordered_set>
 
using namespace std;
 
int t, n, m, k;
int arr[100001= { 0 };
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    cin >> t;
 
    while (t--)
    {
        cin >> n >> m >> k;
 
        for (int i = 0; i < n; ++i)
        {
            cin >> arr[i];
        }
 
        long long sum = 0;
 
        for (int i = 0; i < m; ++i)
        {
            sum += arr[i];
        }
 
        int answer = 0;
        if (sum < k) ++answer;
 
        if (n == m)
        {
            printf("%d\n", answer);
            continue;
        }
 
        for (int i = 0; i < n-1++i)
        {
            sum -= arr[i]; // 스타트 빼고
            sum += arr[(i + m) % n]; // 다음꺼 더하기
 
            if (sum < k) ++answer;
        }
 
        printf("%d\n", answer);
    }
}
 
 
cs

 

현재 구간이 조건에 맞을경우, 즉 구간의 합들이 k 미만일 경우 정답을 카운팅해주면 되는데, 

처음에 구간 맞춰야해서 미리 한번 검사를 했다. 그렇기 때문에 이후 반복문으로 검사할 때는 한번 빼줘야한다 (53번째 라인 n-1)

 

거기에 더해서, n값이랑 m값이 같을 경우 연속된경우는 딱 한가지밖에 없으니 이 경우도 예외처리를 잘 해주면 된다.