반응형
누적합 문제이다.
start 포인트와 end 포인트를 둬서 투포인트로 풀어도 된다. 하지만 이 방법은 여기서 최적의 풀이법은 아니다.
#include <iostream>
#include <algorithm>
#include <climits>
#include <vector>
using namespace std;
int answer = INT_MIN;
int main() {
int start, end, n, k, sum = 0;
cin >> n >> k;
start = 0;
end = k - 1;
vector <int> v(n);
for (int i = 0; i < n; i++)cin >> v[i];
for (int i = 0; i <= k - 1; i++)sum += v[i];
for (int i = 0; i <= n - k; i++) {
answer = max(answer, sum);
if (end == n - 1)break;
else {
sum -= v[start++];
sum += v[++end];
}
}
cout << answer;
}
<투포인트 코드>
이런식으로 포인트 두개를 계속 바꿔주면서 sum 값을 비교하는 코드를 짤수 있다. 하지만 두개의 포인트 말고 하나의 포인트로도 구현 할 수 있다.
즉, 입력값을 다 더한 누적합 배열을 하나 생성하여 (현재 인덱스의 누적합) - ((현재 인덱스-K) 의 누적합)으로 풀면된다.
#include <iostream>
#include <algorithm>
#include <climits>
#include <vector>
using namespace std;
int answer = INT_MIN;
int temp, sum[100001],n,k;
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> temp;
sum[i] = sum[i - 1] + temp;
}
for (int i = k; i <= n; i++) {
answer = max(answer, sum[i] - sum[i - k]);
}
cout << answer;
}
반응형
'백준 > 구현' 카테고리의 다른 글
[백준 9935번 / C++] 문자열 폭발 (0) | 2022.01.17 |
---|---|
[백준 2979번 / C++] 트럭 주차 (0) | 2022.01.17 |
[백준 10808번 / C++] 알파벳 개수 (0) | 2022.01.17 |
[백준 2309번/ C++] 일곱 난쟁이 (0) | 2022.01.17 |
[백준 9996번/ C++] 한국이 그리울 땐 서버에 접속하지 (1) | 2022.01.13 |
댓글