정수의 숫자와 연속 부분합의 길이가 주어진다
연속된 숫자의 합이 최대가 되는 값을 출력한다
간단한 방법으로 풀어서(naive) 정답을 도출하고,
더 간단한 방법이 없는지 확인한다
- 구간 합 구하기
- 누적 합 구하기
- 범위 설정해서 원하는 값 도출
#include <stdio.h>
int N, K, arr[100100], ans = -10000000; // arr 존재
int main()
{
scanf("%d %d", &N, &K);
for (int i = 1; i <= N; i++) {
scanf("%d", &arr[i]); // 입력 받고
arr[i] += arr[i - 1]; // 누저값을 쌓아감
}
// 누적합을 구해두고 범위마다 사용하기
for (int i = K; i <= N; i++) {
if (ans < arr[i] - arr[i - K]) ans = arr[i] - arr[i - K];
}
printf("%d\n", ans);
return 0;
}
'Algorithms > simulation' 카테고리의 다른 글
2 Problem D : 키로거(Keylogger) (0) | 2019.11.07 |
---|---|
2 Problem C : 용액 (0) | 2019.11.07 |
1 Problem F : 연속부분합 찾기 (0) | 2019.11.07 |
1 Problem B : 못생긴 수 (0) | 2019.11.07 |
4 Problem C : 숫자 야구2 (0) | 2019.11.07 |
댓글