구간 합을 이용해 간단하게 풀 수 있는 문제이다. 배열을 사용해 수를 입력받으면서 구간 합을 저장하면 된다.
우선, 필요한 변수들을 선언한다.
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int n = scanner.nextInt();
int[] partialSum = new int[size];
StringBuilder result = new StringBuilder();
이제 구간 합을 저장하면서 수를 입력받으면 된다.
partialSum[0] = scanner.nextInt();
for(int i = 1; i<size; i++){
partialSum[i] = partialSum[i-1];
partialSum[i] += scanner.nextInt();
}
이전까지의 합을 저장하려면
partialSum[i] = partialSum[i-1];
를 해야 하는데, i가 0 즉, 처음 입력받을 때도 해당 코드를 쓰면 IndexOutOfBoundsException이 생기기 때문에, 처음엔 직접 입력을 받아야 하는 것을 주의하자.
입력이 끝났으면 출력해야 한다.
for(int i = 0; i<n; i++){
int from = scanner.nextInt();
int to = scanner.nextInt();
result.append(partialSum[to-1] - (from == 1 ? 0 : partialSum[from - 2]));
result.append(i == n-1 ? "" : '\n');
}
System.out.println(result);
여기서도 주의해야 할 점은, i와 j가 index 형태로 주어지는 것이 아닌, 1부터 시작하는 형태이므로 -1을 해 주어야 한다는 것과, from이 1일 때는 index상으로 0이므로, from-1을 하면 IndexOutOfBoundsException이 생기기 때문에 0을 빼 주어야 한다는 것이다.
결과 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int n = scanner.nextInt();
int[] partialSum = new int[size];
StringBuilder result = new StringBuilder();
partialSum[0] = scanner.nextInt();
for(int i = 1; i<size; i++){
partialSum[i] = partialSum[i-1];
partialSum[i] += scanner.nextInt();
}
for(int i = 0; i<n; i++){
int from = scanner.nextInt();
int to = scanner.nextInt();
result.append(partialSum[to-1] - (from == 1 ? 0 : partialSum[from - 2]));
result.append(i == n-1 ? "" : '\n');
}
System.out.println(result);
}
}
'백준' 카테고리의 다른 글
2230번: 수 고르기(Java) (1) | 2023.10.11 |
---|---|
2559번: 수열(Java) (0) | 2023.07.25 |
16139번: 인간-컴퓨터 상호작용(Java) (0) | 2023.07.22 |
11279번: 최대 힙(Java) (0) | 2023.04.17 |
1043번: 거짓말(Java) (0) | 2023.04.13 |