개념
연속한 일정 길이 구간의 정보를 유지하면서 구간을 한 칸씩 이동하는 방법입니다. 각 구간의 합을 처음부터 다시 구하는 대신 빠진 원소를 빼고 새 원소를 더합니다.
고정 길이 구간
길이 인 첫 구간의 합을 구합니다. 오른쪽으로 한 칸 옮기면 왼쪽 끝의 값 하나가 빠지고 오른쪽에 값 하나가 들어옵니다.
에서 길이 인 구간 합은 입니다. 첫 합 에서 를 빼고 을 더하면 다음 합 을 얻습니다.
첫 구간과 다음 구간의 합은 각각 와 입니다. 가운데 가 겹치므로 다시 더하는 대신 빠진 를 빼고 들어온 을 더할 수 있습니다. 매번 길이 의 합을 처음부터 구하면 구간마다 번 더하지만, 이 방법은 다음 구간으로 옮길 때 두 값만 처리합니다.
같은 길이의 모든 연속 구간을 순서대로 확인할 때 적합합니다. 길이가 서로 다른 임의의 구간 합을 여러 번 묻는다면 누적 합으로 각 구간을 바로 계산하는 방법을 사용할 수 있습니다.
복잡도
원소 수를 , 구간 길이를 라고 합니다. 첫 구간을 계산한 뒤에는 원소 하나를 빼고 하나를 더해 갱신합니다.
| 연산 | 시간복잡도 | 공간복잡도 |
|---|---|---|
| 첫 구간 합 계산 | 추가 | |
| 전체 구간 확인 | 입력 , 추가 |
예제
문제
길이가 인 연속 구간 중 합이 가장 큰 구간의 합을 구하여라.
입력
첫째 줄에 원소 수 과 구간 길이 가 공백을 사이에 두고 주어진다. 이다.
둘째 줄에 수열의 원소 이 공백을 사이에 두고 주어진다. 이다.
출력
구간 합의 최댓값을 출력한다.