시작 좌표와 끝좌표 사이의 모든 값의 합을 구하는 것이 아니다!
시작 좌표와 끝좌표를 이은 직사각형 안에서 모든 값의 합을 구한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][] arr = new int[n + 1][m + 1]; // 2차원 배열 인덱스를 1부터 사용하기 위해
// 2차원 배열 입력
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
arr[i][j] = sc.nextInt();
}
}
int k = sc.nextInt();
int x1, y1, x2, y2;
// k번 반복
for (int i = 0; i < k; i++) {
int sum = 0;
// 시작 좌표와 끝 좌표 입력
x1 = sc.nextInt();
y1 = sc.nextInt();
x2 = sc.nextInt();
y2 = sc.nextInt();
// 시작 좌표에서 끝 좌표까지의 합 구하기
for (int c = x1; c <= x2; c++) {
for (int d = y1; d <= y2; d++) {
sum += arr[c][d];
}
}
System.out.println(sum);
}
}
}
처음에 시작 좌표에서 끝 좌표까지 모두의 합을 구하는 건줄 알고 시작 좌표가 있는 행에서 시작 좌표에서 끝까지 합을 구하고, 끝 좌표가 있는 행에서 처음부터 끝 좌표까지의 합을 구하고, 중간 행들은 모두 합을 구하는 방식으로 코드를 짰다.
하지만 문제를 잘 읽어보니 그렇게 짤 필요가 없었다. 그냥 시작 좌표와 끝좌표로 직사각형을 만들어서 그 직사각형의 합을 구해주면 되는 것이었다!!!!
문제를 잘 읽자!!!!!!!!!!!