▶실버4
풀이
누적 합을 이용한 문제. 배열 형태로 입력을 받아줄 때 이전까지의 누적 합을 배열에 저장한다.
이후 연속된 m을 더한 것 중 가장 큰 값을 구하는 것이므로 for문을 돌려 arr[i] - arr[i - m] 중 가장 큰 값이 답.
수가 엄청 커질 수 있으므로 자료형은 long long. 0번째 인덱스의 경우를 신경 안써줘서 100%에서 에러났다.
코드
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <ctime>
using namespace std;
long long money[100001];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n, m;
cin >> n >> m;
cin >> money[0];
//입력 받으면서 누적 합 구하기
for (int i = 1; i < n; i++) {
cin >> money[i];
money[i] += money[i - 1];
}
//1일부터 m일까지 일하는 경우를 ans로 먼저 선언
long long ans = money[m - 1];
for (int i = m; i < n; i++) {
ans = max(ans, money[i] - money[i - m]);
}
cout << ans;
}
'Algorithm > Baekjoon' 카테고리의 다른 글
11057_오르막수 (0) | 2023.01.04 |
---|---|
2003_수들의 합 2 (0) | 2023.01.02 |
21921_블로그 (0) | 2023.01.01 |
2583_영역 구하기 (0) | 2022.11.11 |
3184_양 (0) | 2022.11.10 |