알고리즘/누적합

BJ S3 11659 구간 합 구하기 4 - Java

naksnaks 2024. 10. 2.
반응형

[문제링크]

https://www.acmicpc.net/problem/11659

 


[문제]

수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.


[입력]

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.


[출력]

총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.


[예제 입력 1]

5 3
5 4 3 2 1
1 3
2 4
5 5

[예제 출력 1]

12
9
1

 


[설명]

이 문제는 제한을 자세히 보아야 한다.제한에서 N과 M이 100,000까지 되므로 O(n^2)이 불가능하게 보인다.따라서 다른 방법을 찾아야 했고, 누적합을 사용해야겠다고 생각이 들었다.

 

j까지의 누적합에서 i까지의 누적합을 빼면 해결되는 문제이다.

 

 

 

백준 알고리즘 11659번 JAVA풀이

 

import java.util.*;

public class BJ11659 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        int[] arr = new int[N];
        int[] sum = new int[N];

        for(int i=0;i<N;i++){
            arr[i] = sc.nextInt();
            if(i!=0) {
                sum[i] += sum[i - 1] + arr[i];
            }else{
                sum[i] = arr[i];
            }
        }

        for(int i=0;i<M;i++){
            int left = sc.nextInt();
            int right = sc.nextInt();

            System.out.println(sum[right-1]-sum[left-1] + arr[left-1]);
        }
    }
}

 

 

 

궁금하신 부분이나 부족한 점은 댓글로 알려주시면 감사하겠습니다.

 

댓글

💲 추천 글