메모리: 55432 KB, 시간: 616 ms
누적 합
2024년 1월 29일 20:45:46
N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N)
총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] arr=new int[100002];
static int[] hap=new int[100002];
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb =new StringBuilder();
int n =Integer.parseInt(br.readLine());
StringTokenizer st =new StringTokenizer(br.readLine());
for(int i=1; i<=n; i++) {
arr[i]=Integer.parseInt(st.nextToken());
hap[i]=hap[i-1]+arr[i];
}
int m = Integer.parseInt(br.readLine());
for(int i=0; i<m; i++) {
st = new StringTokenizer(br.readLine());
int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());
sb.append(hap[num2]-hap[num1-1]+"\n");
}
System.out.println(sb.toString());
}
}
누적 합 알고리즘을 사용하는 기본적인 문제이다.