티스토리 뷰

본 글은 다크모드에 최적화되어 있습니다.

학기 중에는 해설 로직을 포함하지 않습니다.

문제

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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    private static int[][] numbers;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);
        numbers = new int[n + 1][n + 1];

        for (int i = 1; i <= n; i++) {
            input = br.readLine().split(" ");
            for (int j = 1; j <= n; j++)
                numbers[i][j] = numbers[i][j - 1] + Integer.parseInt(input[j - 1]);
        }

        for (int i = 0; i < m; i++) {
            input = br.readLine().split(" ");
            int x1 = Integer.parseInt(input[1]);
            int y1 = Integer.parseInt(input[0]);
            int x2 = Integer.parseInt(input[3]);
            int y2 = Integer.parseInt(input[2]);
            sb.append(getSum(x1, y1, x2, y2) + "\n");
        }
        System.out.println(sb);

    }

    private static int getSum(int x1, int y1, int x2, int y2) {
        int total = 0;
        for (int y = y1; y <= y2; y++) {
            total += (numbers[y][x2] - numbers[y][x1 - 1]);
        }
        return total;
    }
}

 

 

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30