본문 바로가기

백준

11659번: 구간 합 구하기 4(Java)

 

 

 구간 합을 이용해 간단하게 풀 수 있는 문제이다. 배열을 사용해 수를 입력받으면서 구간 합을 저장하면 된다. 

 

 

우선, 필요한 변수들을 선언한다. 

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