구간합, 누적합 알고리즘

PARK JOOCHANG·2023년 11월 8일
0

Algorithm

목록 보기
3/9

구간합, 누적합 알고리즘

누적합(구간합) 은 말 그대로 구간의 누적합을 구하는 문제이다.

배열에 값을 저장하고 지정된 인덱스부터 하나씩 더해가는 방식은 최악의 경우 O(n^2)의 시간 복잡도를 갖기 때문에 입력의 범위가 클 때 사용할 수 없다. 하지만 누적합을 사용하면 O(n)으로 해결할 수 있다.


인덱스123456
배열563912
누적합51114232426

예를 들어 3번 부터 5번까지의 누적합을 구하려면

5번 구간합에서 2번 구간합을 빼주면 된다.

구현

import java.util.Arrays;

public class Main {
    public static void main(String[] args){
        int[] array = {5, 6, 3, 9, 1, 2};
        int[] prefixSum = new int[array.length];

        for(int i = 0; i < array.length; i++){
            for(int j = 0; j <= i; j++){
                prefixSum[i] += array[i];
            }
        }
    }
}

위와 같이 구현할 경우 누적합을 구할 때, 처음 인덱스부터 다시 더하는 방식으로 O(n^2) 시간 만큼 걸린다.

import java.util.Arrays;

public class Main {
    public static void main(String[] args){
        int[] array = {5, 6, 3, 9, 1, 2};
        int[] prefixSum = new int[array.length];
        prefixSum[0] = array[0];
        for(int i = 1; i < array.length; i++){
            prefixSum[i] = prefixSum[i - 1] + array[i];
        }
    }
}

위 코드가 O(n) 시간이 걸리는 누적합 알고리즘이다.

profile
모르면 알고 넘어가자

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN