반응형
[문제링크]
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]);
}
}
}
궁금하신 부분이나 부족한 점은 댓글로 알려주시면 감사하겠습니다.
'알고리즘 > 누적합' 카테고리의 다른 글
BJ S1 11660 구간 합 구하기 5 - Java (1) | 2024.10.07 |
---|---|
BJ_G5_3020_개똥벌레 - Java (0) | 2022.06.06 |
BJ_S3_2559_수열 - Java (0) | 2022.06.06 |
2022 KAKAO BLIND RECRUITMENT - 파괴되지 않은 건물 (0) | 2022.06.05 |
댓글