티스토리 뷰
문제링크 : 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])
'Problem Solving > 백준' 카테고리의 다른 글
| [백준 1935번] 후위 표기식2 (C++) (0) | 2023.09.24 |
|---|---|
| [백준 2143번] 두 배열의 합 (C++) (0) | 2023.09.23 |
| [백준 2473번] 세 용액 (C++) (0) | 2023.09.21 |
| [백준 11049번] 행렬 곱셈 순서 (C++) (0) | 2023.09.20 |
| [백준 11052번] 카드 구매하기 (C++) (0) | 2023.09.19 |
