Lewis's Tech Keep

[백준] 구간 합 구하기 4 본문

Java/알고리즘

[백준] 구간 합 구하기 4

Lewis Seo 2021. 3. 6. 00:26

- 참고: www.acmicpc.net/problem/11659

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net

 - DP 문제

 - 구간 합을 미리 저장해 놓는다면 기존 O(NM)에 시간 복잡도를 가지던 합 계산이 O(1) 안에 풀리게 된다.

   (미리 저장해 두므로)

 

 

더보기
import java.util.Scanner;

public class Solution {
    // prefix sum
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] num = new int[n+1];
        for(int i = 1; i<=n; i++) {
            num[i] = sc.nextInt();
        }

        int[][] indices = new int[m][2];
        for(int j=0; j<m; j++) {
            indices[j][0] = sc.nextInt();
            indices[j][1] = sc.nextInt();
        }

        int[] dp = new int[n+1];
        dp[0] = 0;
        for(int i=1; i<=n;i++) {
            dp[i] = dp[i-1] + num[i];
        }

        int idx = 0;
        while(idx < m) {
            System.out.println(dp[indices[idx][1]] - dp[indices[idx][0]-1]);
            idx++;
        }

    }
}

'Java > 알고리즘' 카테고리의 다른 글

[백준] N과 M  (0) 2021.03.07
[백준] 1로 만들기 -2  (0) 2021.03.06
[백준] RGB 거리  (0) 2021.03.06
[백준] 계단 오르기  (0) 2021.03.05
[백준] 1, 2, 3 더하기  (0) 2021.03.05
Comments