문제
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
알고리즘
누적합
풀이
1. 1~N 각각 자기 자신까지의 합을 구한다
2. from~to까지의 누적합을 구한다. (aSum[to] - aSum[from-1]
코드
package com.company;
import java.io.*;
import java.util.StringTokenizer;
public class Test_Accumulate_Sum {
public static int N, M;
public static int[] aSum;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
aSum = new int[N + 1];
st = new StringTokenizer(bf.readLine());
for (int i = 1; i <= N; i++) {
aSum[i] = aSum[i-1] + Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(bf.readLine());
int from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
sb.append(aSum[to] - aSum[from - 1] + "\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}
'Algorithm (PS) > 백준' 카테고리의 다른 글
[백준 5568] 카드 놓기 (순열+Hash) (0) | 2023.08.08 |
---|---|
[백준] 11404 플로이드 (Java) [FloydWashal] (1) | 2023.07.28 |
[백준] 2252. 줄세우기(Java) [위상정렬] (0) | 2023.07.25 |
[백준] 1922 (Java) [MST 알고리즘] (0) | 2023.07.25 |
[백준] 1717 집합의 표현(Java) [Union-Find] (0) | 2023.07.24 |