Algorithm/Algorithm 문제

백준_11660 구간 합 구하기 5 (구간합배열)

kjyyjk 2023. 11. 20. 23:10

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BJ_11660 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int i, j, x1, y1, x2, y2, result;
        int[][] arr = new int[n+1][n+1];
        int[][] arrSum = new int[n+1][n+1];

        //원본 배열과 구간 합 배열 값 채우기
        for(i=1; i<n+1; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for(j=1; j<n+1; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
                arrSum[i][j] = arrSum[i-1][j] + arrSum[i][j-1] + arr[i][j] - arrSum[i-1][j-1];
            }
        }

        //각 정답 구하기
        for(i=0; i<m; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            x1 = Integer.parseInt(st.nextToken());
            y1 = Integer.parseInt(st.nextToken());
            x2 = Integer.parseInt(st.nextToken());
            y2 = Integer.parseInt(st.nextToken());

            result = arrSum[x2][y2] - arrSum[x2][y1-1] - arrSum[x1-1][y2] + arrSum[x1-1][y1-1];

            sb.append(result).append('\n');
        }

        System.out.println(sb);
        br.close();

    }
}

 
 

 

11660번: 구간 합 구하기 5

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

www.acmicpc.net