문제
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)
해설
이 문제는 1초라는 제한 시간 안에 M개의 질문에 대한 범위합을 구해야하기 때문에 하나하나 반복문을 돌리기엔 시간이 부족합니다. 따라서 누적합을 활용하여 시간을 단축시켜야 합니다.
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder("");
static int N, M;
static int[] dp;
static void input() throws IOException {
N = Integer.parseInt(br.readLine());
dp = new int[N+1];
st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++)
dp[i] = dp[i-1] + Integer.parseInt(st.nextToken());
M = Integer.parseInt(br.readLine());
}
static void process() throws IOException{
for(int i=0; i<M; i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
sb.append(dp[y]-dp[x-1]).append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws IOException{
input();
process();
}
}
<링크>
반응형
'백준' 카테고리의 다른 글
백준 / BOJ / 1707 / 이분 그래프 (0) | 2021.11.10 |
---|---|
백준 / BOJ / 10211 / Maximum Subarray (0) | 2021.11.08 |
백준 / BOJ / 11660 / 구간 합 구하기 5 (0) | 2021.11.06 |
백준 / BOJ / 1629 / 곱셈 (0) | 2021.11.06 |
백준 / BOJ / 11659 / 구간 합 구하기4 (0) | 2021.11.05 |
댓글