이 문제는 2차원에서의 누적 합을 구하는 문제이다.
sum[i][j]: (1, 1) ~ (i, j)까지의 합이라고 할 때,
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + arr[i][j]와 같다
마지막으로 (x1, y1) ~ (x2, y2)의 값은 s[x2][y2] - s[x2][y-1] - s[x1-1][y2] + s[x1-1][y1-1]이다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int arr[][] = new int[n + 1][n + 1];
int sum[][] = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
arr[i][j] = in.nextInt();
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + arr[i][j];
}
}
for (int i = 0; i < m; i++) {
int x1 = in.nextInt();
int y1 = in.nextInt();
int x2 = in.nextInt();
int y2 = in.nextInt();
int ans = sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1];
System.out.println(ans);
}
}
}
'알고리즘 공부 > boj' 카테고리의 다른 글
boj 10942: 팰린드롬? (0) | 2020.07.20 |
---|---|
boj 1890: 점프 (0) | 2020.07.20 |
boj 1197: 최소 스패닝 트리 (0) | 2020.07.19 |
boj 2357: 최솟값과 최댓값 (0) | 2020.07.18 |
boj 10986: 나머지 합 (0) | 2020.07.18 |