PS/Baekjoon
[Baekjoon] 11660 - 구간 합 구하기 5
서현 SEOHYEON
2022. 11. 15. 12:40
📝 문제
🔑 풀이 과정
- 합 배열 만드는 부분이 이해가 안가서 시간이 오래걸렸던 문제. 복잡하면 최대한 손으로 그려보기.
🔓 답안
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][N+1];
int[][] sumarr = new int[N+1][N+1];
int[] result = new int[M];
// 배열 입력받기
int i, j;
for(i = 1; i <= N; i++){
for(j = 1; j <= N; j++){
arr[i][j] = sc.nextInt();
}
}
// 합 배열 만들기
sumarr[1][1] = arr[1][1]; // 1번 단계
// 2번 단계
for(i = 2; i <= N; i++){
sumarr[1][i] = sumarr[1][i-1] + arr[1][i];
}
for(i = 2; i <= N; i++){
sumarr[i][1] = sumarr[i-1][1] + arr[i][1];
}
// 3번 단계
for(i = 2; i <= N; i++){
for(j = 2; j <= N; j++){
sumarr[i][j] = sumarr[i-1][j] + sumarr[i][j-1] + arr[i][j] - sumarr[i-1][j-1];
}
}
// --- 합 배열 생성 끝
for(i = 0; i < M; i++){
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
result[i] = sumarr[x2][y2] - sumarr[x1-1][y2] - sumarr[x2][y1-1] + sumarr[x1-1][y1-1];
}
for(i = 0; i < M; i++){
System.out.println(result[i]);
}
}
}