백준

백준 11660 구간 합 구하기 5(Java)

Park DJ 2023. 2. 18. 02:36

https://www.acmicpc.net/problem/11660

 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
      
    int n = sc.nextInt();
    int m = sc.nextInt();
    int arr[][] = new int[n + 1][n + 1];
    int dp[][] = new int[n + 1][n + 1];
 
    for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) arr[i][j] = sc.nextInt();
    }

    for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + arr[i][j];
    }

    for(int i = 0; i < m; i++) {
      int x1 = sc.nextInt();
      int y1 = sc.nextInt();
      int x2 = sc.nextInt();
      int y2 = sc.nextInt();
      int result = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1];
      sb.append(result+"\n");
    }

    System.out.println(sb);
  }
}