문제링크 : https://www.acmicpc.net/problem/12847
12847번: 꿀 아르바이트
월세를 내기 바로 전 날 까지 인 n (1 ≤ n ≤ 100,000) 일과 일을 할 수 있는 날 m (0 ≤ m ≤ n) 일이 주어진다. 그 다음 줄 에는 1일부터 n일 까지 일급 Ti가 순서대로 주어진다. (0 < Ti ≤ 1,000,000)
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int arr[100001];
ll result = 0, sum = 0;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M;
cin >> N >> M;
for(int i=0; i<N; i++)
{
cin >> arr[i];
}
for(int i=0; i<N; i++)
{
sum+=arr[i]; //누적합
if(i>M-1) sum-=arr[i-M]; //앞에 값 빼주기
result = max(result, sum); //최대값 저장
}
cout << result;
return 0;
}
누적합을 이용한 문제이다.
처음에는 그냥 계속해서 더해주다가, (sum+=arr[i]]
현재 더해준 값의 갯수가 M을 넘어가면 넘어간 만큼 맨 앞부터 값을 빼주는 과정을 거친다. (sum-=arr[i-M])
'백준 > 실버' 카테고리의 다른 글
[백준 16967번] 배열 복원하기 (C++) (0) | 2023.09.30 |
---|---|
[백준 1935번] 후위 표기식2 (C++) (0) | 2023.09.24 |
[백준 11052번] 카드 구매하기 (C++) (0) | 2023.09.19 |
[백준 10825번] 국영수 (C++) (0) | 2023.09.16 |
[백준 1946번] 신입 사원 (C++) (0) | 2023.09.15 |