본문 바로가기

Study/BaekJoon

[백준 자바JAVA] 2167번- 2차원 배열의 합

728x90

https://www.acmicpc.net/problem/2167


● 문제

처음에 입력값이 너무 복잡해서 무슨 말인가 했지만 천천히 읽어보면서 이해해보면 구현하기 쉬운 문제이다.

먼저 첫 줄에 2차원 배열의 크기 N, M이 주어진다. 즉 2, 3이면 arr[2][3] 이 되는것이다.

이후 그 아래에 배열의 입력값들이 입력되고

 

그리고 합을 구할 부분의 개수 K의 값이 입력이 된다. 즉 3을 입력하면 3번 구하는 것이다.

이후 i, j ,x, y의 값이 주어지는데 이거는  arr[i][j] 부터 arr[x][y]까지의 값의 합을 구하는 것이다.

즉 1 1 2 3 이 주어지면 arr[1][1]부터 arr[2][3]의 값을 구하면 되는것이다.

 

이렇게 문제를 이해하고나면 코드를 짜기 쉬워진다.


● 코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[][] arr = new int[N][M];

        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j = 0; j < M; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        int K = Integer.parseInt(br.readLine());

        for(int h = 0; h < K; h++) {
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken()) - 1;
            int j = Integer.parseInt(st.nextToken()) - 1;
            int x = Integer.parseInt(st.nextToken()) - 1;
            int y =  Integer.parseInt(st.nextToken()) - 1;

            int count = 0;

            for(int a = i; a <= x; a++) {
                for(int b = j; b <= y; b++)
                    count += arr[a][b];
            }
            System.out.println(count);
        }
    }
}

 

728x90