Post

PrefixSum

구간합

어떠한 N개의 숫자를 더할 때, 일일이 더하는 방법보다는, 구간합 방식을 활용하면 시간을 엄청나게 단축 시킬 수 있습니다.

만약에 구간합을 사용하지 않고, 합 배열을 사용한다면 합을 구하는 시간복잡도가 O(N)이 소요됩니다.

하지만 구간합을 사용한다면, O(1)으로 시간복잡도가 대폭 감소하게됩니다.

코드 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(in.readLine());
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int sum;
        st = new StringTokenizer(in.readLine());
        int[] result = new int[A+1];
        for (int j = 1; j <= A; j++) {
            result[j] = result[j - 1] + Integer.parseInt(st.nextToken());
        }

        for (int i = 0; i < B; i++) {
            st = new StringTokenizer(in.readLine());
            int c = Integer.parseInt(st.nextToken());
            int l = Integer.parseInt(st.nextToken());
            sum = result[l] - result[c-1];
            System.out.println(sum);
        }
    }
}
This post is licensed under CC BY 4.0 by the author.