문제 링크
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
문제 설명
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
long[] arr = new long[N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i] = arr[i - 1] + Integer.parseInt(st.nextToken()); //누적 합
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
System.out.println(arr[end] - arr[start - 1]); //기본적인 누적합 공식
}
}
}
풀이
1. 입력하는 값 N, M의 값이 Max = 100,000 이기 때문에 최대 값은 10,000,000,000 번이다. -> long으로 설정[test]
2. start -> end 까지의 누적 합이기 때문에 임의로 편의를 위해 arr[N + 1]로 설정한다.
3. 배열에 이전 배열의 값을 더해서 넣어준다. ex) [5,4,3,2,1] -> [5,9,12,14,15]
4. 문제에서 설명된 구간별 값을 도출한다. => arr[end] - arr[start - 1]
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
백준 11729번 : 최대 힙 [Java] (0) | 2023.09.04 |
---|---|
백준 11724번 : 연결 요소의 개수 [Java] (0) | 2023.09.03 |
백준 11047번 : 동전 0 [Java] (0) | 2023.09.02 |
댓글