Top 10 누적 합 알고리즘 The 28 Detailed Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 누적 합 알고리즘 on Google, you do not find the information you need! Here are the best content compiled and compiled by the Chewathai27.com/to team, along with other related topics such as: 누적 합 알고리즘 누적합 알고리즘 파이썬, 2차원 누적합, 구간합 알고리즘, 백준 누적합, c++ 누적합, 누적합 알고리즘 자바, Prefix sum, c언어 누적합


코딩 테스트 알고리즘 대회 핵심 노트 – 투 포인터(Two Pointers), 구간 합(Prefix Sum)
코딩 테스트 알고리즘 대회 핵심 노트 – 투 포인터(Two Pointers), 구간 합(Prefix Sum)


누적합(prefix sum) :: 코딩무식자 전공생

  • Article author: jow1025.tistory.com
  • Reviews from users: 47056 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 누적합(prefix sum) :: 코딩무식자 전공생 누적합은 말 그대로 구간의 누적합을 구하는 문제입니다. 일반적으로 사용되는 배열에 값을 저장하고 지정된 인덱스부터 하나씩 더해가는 방식은 최악 … …
  • Most searched keywords: Whether you are looking for 누적합(prefix sum) :: 코딩무식자 전공생 누적합은 말 그대로 구간의 누적합을 구하는 문제입니다. 일반적으로 사용되는 배열에 값을 저장하고 지정된 인덱스부터 하나씩 더해가는 방식은 최악 … 누적합은 말 그대로 구간의 누적합을 구하는 문제입니다. 일반적으로 사용되는 배열에 값을 저장하고 지정된 인덱스부터 하나씩 더해가는 방식은 최악의 경우O(n^2)의 시간복잡도를 갖기 때문에 입력의범위가 클..코딩초보 대학생의 공부일지와 일상을 담은 블로그입니다.
    [email protected]
  • Table of Contents:

누적합(prefix sum)

티스토리툴바

누적합(prefix sum) :: 코딩무식자 전공생
누적합(prefix sum) :: 코딩무식자 전공생

Read More

[Java]누적 합(Prefix Sum , Cumulative Sum) :: TH

  • Article author: sskl660.tistory.com
  • Reviews from users: 7124 ⭐ Ratings
  • Top rated: 4.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Java]누적 합(Prefix Sum , Cumulative Sum) :: TH Algorithm/수학&기타 … 누적 합이란, 말 그대로 나열된 수의 누적된 합을 말한다. … 자연수를 나타내는 수열 An의 5항까지의 누적 합. …
  • Most searched keywords: Whether you are looking for [Java]누적 합(Prefix Sum , Cumulative Sum) :: TH Algorithm/수학&기타 … 누적 합이란, 말 그대로 나열된 수의 누적된 합을 말한다. … 자연수를 나타내는 수열 An의 5항까지의 누적 합. *누적 합(Prefix Sum, Cumulative Sum) -> 누적 합이란, 말 그대로 나열된 수의 누적된 합을 말한다. -> 조금 더 엄밀히 말하면, 수열 An에 대해서, 구간 [1, 1]의 합, 구간 [1, 2]의 합, 구간 [1, 3]의 합, …..
  • Table of Contents:

TAG

관련글 관련글 더보기

인기포스트

[Java]누적 합(Prefix Sum , Cumulative Sum) :: TH
[Java]누적 합(Prefix Sum , Cumulative Sum) :: TH

Read More

누적 합

  • Article author: book.acmicpc.net
  • Reviews from users: 23076 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 누적 합 누적 합 (Prefix Sum) … 배열이 변하지 않으니 구간의 합도 변하지 않습니다. 따라서, 앞에서부터 차례대로 누적된 합을 구해놓고 이를 이용해서 구간의 합을 구할 … …
  • Most searched keywords: Whether you are looking for 누적 합 누적 합 (Prefix Sum) … 배열이 변하지 않으니 구간의 합도 변하지 않습니다. 따라서, 앞에서부터 차례대로 누적된 합을 구해놓고 이를 이용해서 구간의 합을 구할 …
  • Table of Contents:
누적 합
누적 합

Read More

[Algorithm] 2차원 배열 부분합, 누적합 구하기

  • Article author: velog.io
  • Reviews from users: 18823 ⭐ Ratings
  • Top rated: 3.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Algorithm] 2차원 배열 부분합, 누적합 구하기 출처. 2차원 누적합, 부분합 구하기2차원배열에서 부분 배열의 합을 구하는 방법을 알아보자. 이중 for를 이용해서 구할 수 있지만 시간복잡도가 … …
  • Most searched keywords: Whether you are looking for [Algorithm] 2차원 배열 부분합, 누적합 구하기 출처. 2차원 누적합, 부분합 구하기2차원배열에서 부분 배열의 합을 구하는 방법을 알아보자. 이중 for를 이용해서 구할 수 있지만 시간복잡도가 … 출처. 2차원 누적합, 부분합 구하기2차원배열에서 부분 배열의 합을 구하는 방법을 알아보자. 이중 for를 이용해서 구할 수 있지만 시간복잡도가 O(n^2)이 되기 때문에 더 효율적인 방법을 찾아보자.다음과 같은 배열이 있다고 가정하자.위 배열에서 연속된 구간의 합,
  • Table of Contents:

알고리즘

부분 배열 합

누적합

[Algorithm] 2차원 배열 부분합, 누적합 구하기
[Algorithm] 2차원 배열 부분합, 누적합 구하기

Read More

[알고리즘] 부분합, 누적합 (Prefix Sum) 쉽게 알아보기(파이썬)

  • Article author: yiyj1030.tistory.com
  • Reviews from users: 27567 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [알고리즘] 부분합, 누적합 (Prefix Sum) 쉽게 알아보기(파이썬) 부분합, 누적합이라고 불리우는 배열의 일부 구간에 대한 합을 매우 빠르게 구할 수 있게 해주는 스킬이다. N개의 원소로 이루어진 배열이 주어졌을 … …
  • Most searched keywords: Whether you are looking for [알고리즘] 부분합, 누적합 (Prefix Sum) 쉽게 알아보기(파이썬) 부분합, 누적합이라고 불리우는 배열의 일부 구간에 대한 합을 매우 빠르게 구할 수 있게 해주는 스킬이다. N개의 원소로 이루어진 배열이 주어졌을 … 부분합, 누적합이라고 불리우는 배열의 일부 구간에 대한 합을 매우 빠르게 구할 수 있게 해주는 스킬이다. N개의 원소로 이루어진 배열이 주어졌을 때 반복문을 통해 부분 배열의 합을 구하려면 O(N)이 걸리는데,..
  • Table of Contents:

관련글

댓글0

전체 방문자

티스토리툴바

[알고리즘] 부분합, 누적합 (Prefix Sum) 쉽게 알아보기(파이썬)
[알고리즘] 부분합, 누적합 (Prefix Sum) 쉽게 알아보기(파이썬)

Read More

누적합 계산하기

  • Article author: ojt90902.tistory.com
  • Reviews from users: 37073 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 누적합 계산하기 누적합은 특정 수열이 주어지고, 그 수열에서 특정 구간의 값을 구하라는 쿼리가 반복적으로 들어올 때 주로 사용하게 되는 개념이다. 예를 들어 길이 n의 … …
  • Most searched keywords: Whether you are looking for 누적합 계산하기 누적합은 특정 수열이 주어지고, 그 수열에서 특정 구간의 값을 구하라는 쿼리가 반복적으로 들어올 때 주로 사용하게 되는 개념이다. 예를 들어 길이 n의 … 누적합(Prefix)는 언제쓰지? 누적합은 특정 수열이 주어지고, 그 수열에서 특정 구간의 값을 구하라는 쿼리가 반복적으로 들어올 때 주로 사용하게 되는 개념이다. 예를 들어 길이 n의 수열이 주어졌을 때, [0, n-..
  • Table of Contents:

Header Menu

Main Menu

누적합 계산하기

누적합(Prefix)는 언제쓰지

1차원 누적합

2차원 누적합

누적합의 한계

‘프로그래밍알고리즘’ 관련 글

Sidebar – Right

Copyright © 만년 꼴지 공대생 세상 이야기 All Rights Reserved

Designed by JB FACTORY

티스토리툴바

누적합 계산하기
누적합 계산하기

Read More

[ 개념 ] 52. Prefix Sum(누적 합, 구간 합)

  • Article author: coder-in-war.tistory.com
  • Reviews from users: 43592 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [ 개념 ] 52. Prefix Sum(누적 합, 구간 합) 누적 합, 구간 합. 누적합 또는 구간 합을 빠르게 구하는 알고리즘입니다. 여기서 주의해야할 것은. 부분 합 은 0 ~ k까지의 합을 의미하는 것이고. …
  • Most searched keywords: Whether you are looking for [ 개념 ] 52. Prefix Sum(누적 합, 구간 합) 누적 합, 구간 합. 누적합 또는 구간 합을 빠르게 구하는 알고리즘입니다. 여기서 주의해야할 것은. 부분 합 은 0 ~ k까지의 합을 의미하는 것이고. > Prefix Sum 누적 합, 구간 합 누적합 또는 구간 합을 빠르게 구하는 알고리즘입니다. 여기서 주의해야할 것은 부분 합 은 0 ~ k까지의 합을 의미하는 것이고 구간 합은 a ~ b까지의 합을 의미 합니다. 이러한 알..꾸준함이 무기입니다.
  • Table of Contents:
[ 개념 ] 52 Prefix Sum(누적 합 구간 합)

티스토리툴바

[ 개념 ] 52. Prefix Sum(누적 합, 구간 합)
[ 개념 ] 52. Prefix Sum(누적 합, 구간 합)

Read More

TWpower’s Tech Blog

  • Article author: twpower.github.io
  • Reviews from users: 40670 ⭐ Ratings
  • Top rated: 4.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about TWpower’s Tech Blog 누적합(Cumulative Sum) 또는 부분합(Prefix Sum) : x0, x1 … xN까지 수가 있을 때 y0=x0, y1=x0+x1 … yN=x0+x1+…+xN처럼 해당 N까지의 합을 … …
  • Most searched keywords: Whether you are looking for TWpower’s Tech Blog 누적합(Cumulative Sum) 또는 부분합(Prefix Sum) : x0, x1 … xN까지 수가 있을 때 y0=x0, y1=x0+x1 … yN=x0+x1+…+xN처럼 해당 N까지의 합을 … Practice makes perfect!Algorithm, C, C++, Prefix Sum
  • Table of Contents:

March 25 2019

환경 및 선수조건

문제

누적합(Prefix Sum Cumulative Sum)이란

풀이

참고자료

TWpower's Tech Blog
TWpower’s Tech Blog

Read More

[알고리즘] 누적합 prefix sum

  • Article author: kjs-dev.tistory.com
  • Reviews from users: 12318 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [알고리즘] 누적합 prefix sum 누적 합(prefix sum) 알고리즘은 계산양을 줄여서 시간적으로 많은 이득을 볼 수 있는 알고리즘 입니다. 예를 들어. 1.그냥 더하기. arr[0]~ … …
  • Most searched keywords: Whether you are looking for [알고리즘] 누적합 prefix sum 누적 합(prefix sum) 알고리즘은 계산양을 줄여서 시간적으로 많은 이득을 볼 수 있는 알고리즘 입니다. 예를 들어. 1.그냥 더하기. arr[0]~ … 누적합? 누적 합(prefix sum) 알고리즘은 계산양을 줄여서 시간적으로 많은 이득을 볼 수 있는 알고리즘 입니다. 예를 들어 1.그냥 더하기 arr[0]~arr[5]까지 입력을 받은 후, arr[0]부터 arr[5]까지 합을 구해야..
  • Table of Contents:

누적합

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

[알고리즘] 누적합 prefix sum
[알고리즘] 누적합 prefix sum

Read More

누적합(Prefix Sum / Cumulative Sum) 알고리즘

  • Article author: ji-musclecode.tistory.com
  • Reviews from users: 23921 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 누적합(Prefix Sum / Cumulative Sum) 알고리즘 ( 누적합 알고리즘 간단 예제 ) [ 1, 2, 3, 4, 5 ] 로 이루어준 숫자 배열에서 각 구간까지의 합을 구하는 배열 [ 1, 3, 6, 10, 15] 을 구한다고 가정 … …
  • Most searched keywords: Whether you are looking for 누적합(Prefix Sum / Cumulative Sum) 알고리즘 ( 누적합 알고리즘 간단 예제 ) [ 1, 2, 3, 4, 5 ] 로 이루어준 숫자 배열에서 각 구간까지의 합을 구하는 배열 [ 1, 3, 6, 10, 15] 을 구한다고 가정 … ( 누적합 알고리즘 간단 예제 ) [ 1, 2, 3, 4, 5 ] 로 이루어준 숫자 배열에서 각 구간까지의 합을 구하는 배열 [ 1, 3, 6, 10, 15] 을 구한다고 가정해보면 아래와 같이 2가지로 구할 수 있습니다. [ 첫번째 방법..
  • Table of Contents:

티스토리 뷰

2 문제 풀이

누적합(Prefix Sum / Cumulative Sum) 알고리즘
누적합(Prefix Sum / Cumulative Sum) 알고리즘

Read More


See more articles in the same category here: https://chewathai27.com/to/blog.

누적합(prefix sum)

누적합은 말 그대로 구간의 누적합을 구하는 문제입니다.

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

누적합은 문제에서 수열이 주어지고 어떤 구간의 값의 합을 구해야 할 때 쓰일 수 있습니다.

예를들어 크기가 5인arr배열에서 3번index와 5번index구간의 구간합을 구한다고 가정하면, 누적합은 arr[0~b까지의 누적합] – arr[0~a-1까지의누적합]으로 표현할 수 있습니다.

그림을 보면 쉽게 이해할 수 있습니다. b-a구간의 누적합을 구하기위해선 b구간까지의 합- a-1구간까지의 합을 빼주면됩니다.

[3,5]구간의 누적합은??

1. 크기가 5인 배열선언( 인덱스1~5)

2. 각 인덱스값에 누적합 저장

3. 3번구간과 5번 구간 사이의 누적합을 구하려면 겹치는 1,2구간을 제외해줘야됨.

즉, 2번인덱스의 누적합을 빼줘야함.

위의 표에서 분홍색부분이 겹치는 부분,즉 빼줘야하는 부분 이고 검은색부분 이 답을 구할 범위다.

코드

#include using namespace std; //인덱스1부터 가정하기위해 크기6으로생성 int arr[6] = { 0,7,6,3,2,1 }; int main() { //arr에 누적합을 저장한다. for (int i = 1; i <=5; i++) { arr[i] = arr[i - 1] + arr[i]; } //[3,5]구간 누적합 구하기 cout << arr[5] - arr[3 - 1] << ' '; } 문제풀고 복습하기 https://www.acmicpc.net/problem/11441 https://www.acmicpc.net/problem/11659

[Java]누적 합(Prefix Sum , Cumulative Sum)

*누적 합(Prefix Sum, Cumulative Sum)

-> 누적 합이란, 말 그대로 나열된 수의 누적된 합을 말한다.

-> 조금 더 엄밀히 말하면, 수열 An에 대해서, 구간 [1, 1]의 합, 구간 [1, 2]의 합, 구간 [1, 3]의 합, …, [1, n]의 합을 누적 합이라고 한다.

자연수를 나타내는 수열 An의 5항까지의 누적 합

※ 따라서 Prefix Sum의 각 요소는 해당 해당 인덱스까지의 부분 합(Partial Sum)을 의미한다. 부분 합은 급수에서 말하는 그 부분합의 의미가 맞다.

*누적 합의 사용

-> 누적 합은 그 목적에 따라 다양한 문제에 활용이 가능하다.

-> 대표적으로 누적 합을 사용하는 문제는 카운팅 정렬(Counting Sort), 구간 합 구하기가 존재한다.

*단순 반복을 이용한 구간 합 구하기

-> 이 글의 핵심 목적이다. 일반적으로 구간의 합을 구하는 경우에는 다음과 같이 모든 구간의 값을 더해주는 방법을 생각해볼 수 있다.

import java.util.Scanner; public class PrefixSum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int[] arr2 = {1, 5, 8, 10, 24, 3, 5, 100, 99, 7}; int a = sc.nextInt(); int b = sc.nextInt(); int sum1 = 0; int sum2 = 0; for(int i = a; i <= b; i++) { sum1 += arr[i]; sum2 += arr2[i]; } System.out.println(sum1); System.out.println(sum2); sc.close(); } } 3번 ~ 5번 인덱스의 구간합 하지만 이렇게 모든 입력마다 구간합을 일일히 구해주는 경우에는 구간의 길이가 M이라고 하면 매 구간합을 구할 때 마다 O(M)이라는 시간이 걸리게 된다. 즉, N개의 구간 에 대해 구간의 길이가 M인 구간합을 구하는 경우 O(NM)의 시간이 걸리는 것을 알 수 있다. 예를 들어, 자연수 구간 [1, 200,000]에서 각 자연수를 시작점으로 구간의 길이가 10000인 구간합을 모두 구하라는 문제를 생각해보면 해당 연산을 바탕으로 모든 구간합을 구하는 경우 총 20억번 가량의 연산을 진행하여야 한다. *누적 합을 이용한 구간 합 구하기 -> 이러한 문제를 개선하기 위해 누적 합을 이용하여 구간 합을 구하는 방법을 사용한다면, 시간 복잡도를 O(N + M)까지 줄일 수 있다. 이 방법은 수열의 부분 합 관련 문제를 풀 때 많이 사용하던 아이디어를 가져오면 된다.

-> 일반적으로 수열 An에서 구간 [i, j]까지의 구간 합을 구하는 경우를 생각해보자.

그림과 같이 n항 까지의 합을 Sn이라고 정의한다면, 구간 [i, j]의 구간합은 Sj와 Si-1을 뺀 값을 구하여 바로 구할 수 있다. 즉, Sn까지의 구간합을 모두 구해 놓기만 한다면(O(M)) 구간 합을 구하는 연산 자체는 O(1)의 시간이면 구할 수 있기 때문에 결론적으로 O(N + M)의 시간 복잡도를 갖는 구간 합을 구하는 연산을 만들 수 있다.

-> 결론적으로 누적 합을 구하고, 그 누적합을 이용하여 주어진 구간의 합을 구하는 로직을 이용하여 구간 합을 더 빠르게 계산할 수 있다. 아래는 위와 같은 입력 값을 바탕으로 누적 합을 이용한 구간 합을 구하는 로직을 구현해 보았다.

import java.util.Scanner; public class PrefixSum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int[] arr2 = { 1, 5, 8, 10, 24, 3, 5, 100, 99, 7 }; int a = sc.nextInt(); int b = sc.nextInt(); // 누적 합 구하기 // 배열의 크기를 + 1하는 이유는, 0번 인덱스 ~ n번 인덱스의 구간합도 구할 수 있게 만들기 위함이다. int[] prefix_sum = new int[11]; int[] prefix_sum2 = new int[11]; for (int i = 1; i < arr.length; i++) { prefix_sum[i] += prefix_sum[i - 1] + arr[i]; prefix_sum2[i] += prefix_sum2[i - 1] + arr2[i]; } // 구간 합 구하기 System.out.println(prefix_sum[b] - prefix_sum[a - 1]); System.out.println(prefix_sum2[b] - prefix_sum2[a - 1]); sc.close(); } } 3번 ~ 5번 인덱스의 구간합 ※ 주석에도 언급해 두었지만, 0번째 인덱스 ~ n번째 인덱스의 구간 합도 구할 수 있게 만들기 위해서는 배열의 크기를 하나 늘려서 앞에 0이라는 값을 추가해주어야 0번째 인덱스에 대한 구간 합도 구할 수 있다.

[Algorithm] 2차원 배열 부분합, 누적합 구하기

출처. 2차원 누적합, 부분합 구하기

부분 배열 합

2차원배열에서 부분 배열의 합을 구하는 방법을 알아보자. 이중 for를 이용해서 구할 수 있지만 시간복잡도가 O(n^2)이 되기 때문에 더 효율적인 방법을 찾아보자.

누적합

다음과 같은 배열이 있다고 가정하자.

arr = [ 3 , 5 , 7 , 1 , 4 ] sum_list = [ 3 , 8 , 15 , 16 , 20 ]

위 배열에서 연속된 구간의 합, 예를들어 arr[1]부터 arr[3]까지의 합을 구하려고 한다면 3개의 원소값을 참조해야한다.

이러한 점을 보완하기 위해서 누적합 수열 sum_list를 도입한다.

sum_list[i]는 arr[0]부터 arr[i]까지의 모든 원소의 합을 값으로 갖는다. 또한 arr[i]부터 arr[j]까지의 부분합은 sum_list[j] – sum_list[i-1]로 정의할 수 있다.

누적합 배열의 성질

sum_list[0] = arr[0] sum_list[i] = sum_list[i – 1] + arr[i] sum_list[n] = arr[0] + arr[1] + … + arr[n-1] + arr[n] arr[i] + arr[i + 1] + … + arr[j-1] + arr[j] = sum_list[j] – sum_list[i-1]

누적합을 활용한 빠른 부분합 계산

1차원 배열일 경우 반복문을 통한 구간합이 O(n)이고, 2차원 배열은 O(n^2)이다. 하지만 누적합 배열의 4번째 특징을 사용해서 연속된 임의의 구간의 합을 O(1)의 시간복잡도로 구할 수 있다.

2차원 누적합

위의 개념을 2차원으로 확장해보자. 이차원 배열에 대한 누적합 배열 또한 2차원 배열이 된다. 직사각형 형태의 배열에 포함되는 직사각형 구간의 원소의 합을 빠르게 구할 수 있다.

이차원 배열 a(i, j)와 누적합 배열 S(i, j)가 있다고 가정하자.

좌측 상단을 a(1, 1)이라 할 때, S(i, j)는 a(1, 1)과 a(i, j)를 양 대각 끝 꼭짓점으로 하는 직사각형 범위 면적 안의 모든 a원소의 합으로 정의된다.

따라서 a(2, 2) ~ a(3, 3)의 부분합을 구해보자.

S(3, 3) 값에서 S(1, 3) 값을 빼고, S(3, 1)값을 뺀다. 이때 S(1, 1)은 S(1, 3)과 S(3, 1)에 의해서 2번 빼진 셈이니 S(1, 1)을 더해주면 초록색 부분의 구간합이 된다.

이를 정리하면 다음과 같다.

2차원 배열 arr이 있을 때, arr[x1][y1]부터 arr[x2][y2]까지의 부분 배열의 합을 Range(x1, y1, x2, y2)라 하자. 그리고 누적합 배열 S로 다음과 같이 정의된다.

Range ( x1 , y1 , x2 , y2 ) = S ( x2 , y2 ) – S ( x1 , y2 ) – S ( x2 , y1 ) + S ( x1 , y1 )

이차원 누적합 배열 구하기

2차원 배열의 누적합 배열을 구하는 방법은 위와 같다.

a(i, j)에서 행방향으로 누적합을 구한다. 행 누적합에 대해서 열방향으로 누적합을 구한다.

arr = [ [ 0 , 1 , 1 , 0 , 0 , 1 ] , [ 0 , 0 , 0 , 0 , 0 , 1 ] , [ 1 , 0 , 1 , 0 , 1 , 1 ] ] def get_sum_list ( arr : List [ List ] ) : sum_list = [ [ sum ( arr [ i ] [ : j + 1 ] ) for j in range ( len ( arr [ 0 ] ) ) ] for i in range ( len ( arr ) ) ] for i in range ( len ( sum_list ) – 1 ) : for j in range ( len ( sum_list [ 0 ] ) ) : sum_list [ i + 1 ] [ j ] += sum_list [ i ] [ j ] return sum_list sum_list = get_sum_list ( arr ) print ( sum_list ) def accum ( S : List [ List ] , x1 : int , y1 : int , x2 : int , y2 : int ) – > int : return S [ x2 ] [ y2 ] – ( S [ x1 ] [ y2 ] + S [ x2 ] [ y1 ] ) + S [ x1 ] [ y1 ] print ( accum ( sum_list , 0 , 1 , 2 , 4 ) )

복잡도 분석

누적합은 두 단계로 나누어진다.

전처리: 누적합 배열 S를 구한다. 일차원 누적합은 O(n), 이차원 누적합은 O(n^2) 시/공간 복잡도를 갖는다. 계산: 원하는 구간의 구간합을 계산한다. 차원 관계없이 O(1)의 상수 시간 복잡도를 갖는다.

누적합의 한계

누적합의 경우 합을 구하는 도중에 원본 배열이 변하는 경우 누적합을 다시 계산해야 한다. 이 경우에는 세그먼트 트리를 사용해야한다.

So you have finished reading the 누적 합 알고리즘 topic article, if you find this article useful, please share it. Thank you very much. See more: 누적합 알고리즘 파이썬, 2차원 누적합, 구간합 알고리즘, 백준 누적합, c++ 누적합, 누적합 알고리즘 자바, Prefix sum, c언어 누적합

Leave a Comment