본문 바로가기

cs/Datastructure & Algorithm

배열의 구간 합 1 - 1차원 배열의 구간 합 구하기

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

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

매번 계산하지 말고 arr[n]까지의 합을 구해놓은 배열 sum을 구현하여

sum[b]-sum[a-1]을 이용해 a~b까지의 구간 합을 구한다

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String[] nm = br.readLine().split(" ");
        int n = Integer.parseInt(nm[0]);
        int m = Integer.parseInt(nm[1]);

        int[] arr = new int[n];
        String[] nums = br.readLine().split(" ");

        for(int i=0;i<n;i++){
            arr[i] = Integer.parseInt(nums[i]);
        }

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

        for(int i=0;i<m;i++){
            String[] fb = br.readLine().split(" ");
            int f= Integer.parseInt(fb[0])-1;
            int b = Integer.parseInt(fb[1])-1;

            int res = (f==0)?sum[b]:sum[b]-sum[f-1];
            bw.write(Integer.toString(res)+"\n");
        }

        bw.flush();
        bw.close();
    }

}