[Algorithm] Prefix Sum 구간합

2021. 5. 11. 22:19·스터디/Algorithm
728x90

🍒구간합이란?

-부분합 : 0~k 까지의 합

-구간합 : a~b 까지의 합

구간합은 말 그대로 시작점 a 부터 끝점 b까지 사이의 모든 값의 합을 의미한다.

 

🍒구간합 적용

구간합을 구하는 문제인데 구간사이의 수의 개수가 5천만개라면?

이러한 요청이 2천만개라면?

이중반복문을 사용해서 해결하면 분명 시간복잡도가 O(N^2)으로 오래걸리는 문제가 생긴다.

int n; //요청 수
scanf("%d", &n);

while(n--){
	int a, b;
    scanf("%d %d", &a, &b);
    
    int sum = 0;
    for(int i=a; i<=b; i++){
    	sum += arr[i];
    }
	cout << sum << endl;
}

prefix Sum 알고리즘을 적용하면 1개의 반복문으로 문제를 해결 할 수 있다.

즉, 미리 합계를 계산해놓고 sum배열에 저장해 놓는다. 이때 시간복잡도는 O(N)이 소요된다.

for(int i=0; i<10; i++)
{
	if(i == 0){
    	sum[i] = arr[i];
    }else{
    	sum[i] = sum[i-1] + arr[i];
    }
}

int n; //요청 수
scanf("%d", &n);

while(n--){
	int a, b;
    scanf("%d %d", &a, &b);
    cout << sum[b] - sum[a-1];
}

총 배열의 길이가 10이라면 10번째 수까지 합을 모두 구해놓고 [a, b] 구간의 합계 = sum[b] - sum[a-1]로 구하면된다.


✔참고

www.crocus.co.kr/843

 

구간 합(Prefix Sum) 알고리즘

목차 1. 구간 합(Prefix Sum)이란? 2. 구간 합(Prefix Sum)이 어디에 쓰일까? 3. Prefix Sum Algorithm 4. Prefix Sum이 쓰이는 문제들 1. 구간 합(Prefix Sum)이란? 공부를 하다보면 부분 합, 구간 합의 개념이..

www.crocus.co.kr

 

728x90

'스터디 > Algorithm' 카테고리의 다른 글

[자료구조] Queue (큐)  (0) 2021.03.08
[자료구조] Stack (스택)  (0) 2021.03.08
[Algorithm] Binary Search (이분 탐색) 개념  (0) 2021.03.02
[Algorithm] Binary Search (이분 탐색)  (0) 2021.02.26
자료형 크기 및 범위 정리  (0) 2021.02.26
'스터디/Algorithm' 카테고리의 다른 글
  • [자료구조] Queue (큐)
  • [자료구조] Stack (스택)
  • [Algorithm] Binary Search (이분 탐색) 개념
  • [Algorithm] Binary Search (이분 탐색)
zoodi
zoodi
IT/개발 관련 지식을 기록하는 블로그입니다.
  • zoodi
    오늘의 기록
    zoodi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 후기
        • 컨퍼런스
        • 일상리뷰
      • 금융경제
        • 뉴스
        • 금융IT용어
        • 경제 및 부동산
      • 코딩 테스트
      • 스터디
        • JAVA
        • Kotlin
        • Spring
        • React, Nextjs
        • 인공지능 AI
        • Cloud & k8s
        • Kafka
        • Database
        • Network
        • Algorithm
        • Hadoop
        • LINUX
        • R Programming
        • 기타 (소공, 보안)
      • 도서
      • 기타
  • 블로그 메뉴

    • 홈
    • 스터디
    • 금융경제
    • 후기
    • 기타
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    codility
    코테
    MySQL
    db
    자바
    금융용어
    알고리즘
    코딜리티
    Kotlin
    프로그래머스
    카카오코테
    스프링부트
    자료구조
    스프링
    리트코드
    CodingTest
    쿠버네티스
    springboot
    C++
    코딩
    코테공부
    이분탐색
    Spring
    kafka
    Python
    코딩테스트
    네트워크
    pythoncodingtest
    LeetCode
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
zoodi
[Algorithm] Prefix Sum 구간합
상단으로

티스토리툴바