코딩테스트/백준

백준 11659번 : 구간 합 구하기 4 [Java]

블로그 주인장 2023. 9. 3.

문제 링크

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]

반응형

댓글