[알고리즘] Java로 배우는 누적합/구간합 - feat.백준(구간합 구하기4)

2025. 3. 10. 19:07·알고리즘

특정 구간의 합을 여러 번 구해야 하는 문제를 풀 때, 단순하게 for문을 사용해서 매번 합을 구하면 시간 초과가 발생할 수 있다. 이런 경우에는 누적합(Prefix Sum)을 활용해서 빠르게 구간합을 구하는 방법을 사용한다.

 

누적합

누적합은 배열의 각 위치까지의 합을 미리 구해놓은 배열이다.

누적합 배열을 사용하면 어떤 구간의 합도 O(1)의 시간복잡도를 가진다.

 

예를 들어 배열이 [5, 4, 3, 2, 1]일 때, 누적합 배열을 만들면 다음과 같다.

(* 편한 계산을 위해 인덱스 0번은 비워두고 배열의 크기는 N+1로 한다.)

 

인덱스 1 2 3 4 5
원본 배열 5 4 3 2 1
누적합 배열 5 9 12 14 15

 

 

구간합

누적합 배열을 이용하면 i번째 수부터 j번째 수까지의 합은 다음 공식으로 구할 수 있다.

구간합(i, j) = S[j] - S[i-1]
  • S[j] : 1번부터 j번까지의 합
  • S[i-1] : 1번부터 (i-1)번까지의 합
  • 따라서, 두 값을 빼주면 i부터 j까지의 합이 나온다.
💡 예를 들어 2~4 구간의 합을 구한다면,
S[4] - S[1] = 14 - 5= 9

 

 

 

풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        int[] prefixSum = new int[n + 1];
        for (int i = 1; i < prefixSum.length; i++) {
            int num = sc.nextInt();
            prefixSum[i] = num + prefixSum[i - 1];
        }

        for (int i = 0; i < m; i++) {
            int start = sc.nextInt();
            int end = sc.nextInt();
            int sum = prefixSum[end] - prefixSum[start - 1];
            System.out.println(sum);
        }
    }
}

 

저작자표시 비영리 변경금지 (새창열림)
'알고리즘' 카테고리의 다른 글
  • [알고리즘] Java로 배우는 Dynamic Programming(동적 계획법) - feat.백준(계단 오르기)
  • [알고리즘] Java로 배우는 카운팅 정렬 - feat.백준(수 정렬하기3)
  • [알고리즘] Java로 배우는 이진탐색 - feat.백준(숫자 카드 2)
  • [프로그래머스] 크레인 인형뽑기 게임 - JAVA
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    변수
    김영한
    자바스크립트
    프로그래머스
    최주호
    sql
    자바
    생성자
    DB
    JPA
    Security
    의존성주입
    Swift
    게시판만들기
    html
    스프링
    객체
    다형성
    MVC
    HTTP
    데이터베이스
    성능최적화
    Spring Security
    Database
    jsp
    javascript
    spring
    Java
    알고리즘
    백준
  • hELLO· Designed By정상우.v4.10.0
뚜비
[알고리즘] Java로 배우는 누적합/구간합 - feat.백준(구간합 구하기4)
상단으로

티스토리툴바