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

2025. 3. 10. 19:07·알고리즘
목차
  1. 누적합
  2. 구간합
  3. 풀이

특정 구간의 합을 여러 번 구해야 하는 문제를 풀 때, 단순하게 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);
}
}
}

 

저작자표시 비영리 변경금지 (새창열림)
  1. 누적합
  2. 구간합
  3. 풀이
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 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
      • 프로젝트
      • 생각정리
  • 태그

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

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.