https://www.acmicpc.net/problem/2559
배열을 입력받고 슬라이딩 윈도우를 통해 k개 만큼의 합을 비교해가면서(i번째 위치의 합을 더해주고 제일 마지막 위치인 i-k번째의 합을 빼주면 된다) 최대합을 찾아내면 된다.
정답코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
vector<int> v(n, 0);
// 배열 입력
for (int i = 0; i < n; i++) {
cin >> v[i];
}
int sum = 0;
for (int i = 0; i < k; i++)
{
sum += v[i];
}
int max_sum = sum;
//슬라이딩 윈도우
for (int i = k; i < n; i++)
{
sum += v[i] - v[i - k];
max_sum = max(max_sum, sum);
}
cout << max_sum << "\n";
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]11660번. 구간 합 구하기5 (0) | 2024.11.20 |
---|---|
[백준][C++]16139번. 인간-컴퓨터 상호작용 (0) | 2024.11.19 |
[백준][C++]11659번. 구간 합 구하기4 (0) | 2024.11.17 |
[백준][C++]11444번. 피보나치 수 6 (0) | 2024.11.16 |
[백준][C++]10830번. 행렬 제곱 (0) | 2024.11.15 |